android - EditText पर फ़ोकस सेट करें




focus android-edittext (9)

मेरे पास एक संपादन टेक्स्ट-फ़ील्ड है और इसके लिए एक ऑनफोकस चेंजलिस्टर सेट करें। जब यह फोकस खो गया है, तो एक विधि कहा जाता है, जो डेटाबेस में एक के साथ EditText के मान की जांच करता है। यदि विधि का रिटर्न-वैल्यू सत्य है, तो टोस्ट दिखाया गया है और फोकस को फिर से संपादन टेक्स्ट पर वापस जाना चाहिए। फोकस हमेशा संपादन टेक्स्ट पर वापस आना चाहिए और कीबोर्ड को तब तक दिखाना चाहिए जब तक कि विधि का वापसी-मूल्य गलत न हो।

संपादित करें: मुझे लगता है, मैंने अपनी वास्तविक समस्या को अभी तक स्पष्ट नहीं किया है: स्क्रीन पर कोई अन्य आइटम संपादित करने में सक्षम नहीं होना चाहिए, जब तक कि संपादन टेक्स्ट का मान किसी मान पर संपादित नहीं किया जाता है, जो विधि "चेकलिगनाम (liganame) बनाता है " विवरण झूठा है। केवल संपादन टेक्स्ट-फ़ील्ड संपादन योग्य होना चाहिए।

यहां मेरा कोड है (जो मेरे लिए काम नहीं करता है):

final EditText Liganame = (EditText) findViewById(R.id.liganame);

    Liganame.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {

                String liganame = Liganame.getText().toString();


                if (checkLiganame(liganame)) {
                    Toast toast = Toast.makeText(CreateTableActivity.this,
                            "Dieser Liganame ist bereits vergeben",
                            Toast.LENGTH_SHORT);
                    toast.show();
                    Liganame.requestFocus();
                }
            }

और विधि:

public boolean checkLiganame(String liganame) {
    boolean found = false;

    DatabaseHelper databaseHelper = new DatabaseHelper(this);
    SQLiteDatabase db = databaseHelper.getReadableDatabase();

    Cursor cursor = db.query("liga", new String[] { "liganame" },
            "liganame = '" + liganame + "'", null, null, null, null);
    Log.i("Liganame: ", String.valueOf(cursor));

    db.close();
    if (cursor != null) {
        found = true;
    }

    return found;
}

यह कोड निम्न परिणाम की ओर जाता है: संपादन टेक्स्ट के बाद फोकस खो गया है, फोकस संपादन टेक्स्ट पर वापस कूदता है, लेकिन मैं अब टेक्स्ट को संपादित नहीं कर सकता।

EDIT2: मेरा कोड बदल गया। परिदृश्य:

मैं पहले संपादन टेक्स्ट पर क्लिक करता हूं और इसमें एक स्ट्रिंग डालता हूं, जो पहले से ही डेटाबेस में है। टोस्ट दिखा रहा है। अब मैं अब अपनी स्ट्रिंग को संपादित नहीं कर सकता। मैं कीबोर्ड पर "अगला" पर क्लिक करता हूं और फोकस पहले संपादन टेक्स्ट पर रहता है। मैं अपनी स्ट्रिंग को संपादित करने की कोशिश करता हूं, लेकिन कुछ भी नहीं होता है। इसके बजाय मेरा नया स्ट्रिंग दूसरे संपादन टेक्स्ट में दिखा रहा है। मैं अपने डिवाइस के बैक-एरो पर क्लिक करता हूं और पहले और दूसरे एडिटटेक्स्ट पर पुनः क्लिक करता हूं -> कोई कीबोर्ड नहीं दिख रहा है।

मेरा नया कोड यहां दिया गया है:

public class CreateTableActivity extends Activity implements
    OnFocusChangeListener {

private EditText Liganame, Mannschaftsanzahl;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.create_league);

    Liganame = (EditText) findViewById(R.id.liganame);
    Liganame.setOnFocusChangeListener(this);
    Mannschaftsanzahl = (EditText) findViewById(R.id.mannschaftsanzahl);
    Mannschaftsanzahl.setOnFocusChangeListener(this);

    final Button save_button = (Button) findViewById(R.id.create_tabelle_speichern_button);

    OnClickListener mCorkyListener = new OnClickListener() {
        public void onClick(View v) {
            ButtonClick();
        }
    };
    save_button.setOnClickListener(mCorkyListener);



}

@Override
public void onFocusChange(View v, boolean hasFocus) {
    String liganame = Liganame.getText().toString();

    if (checkLiganame(liganame)) {
        if (Liganame.requestFocus()) {
            getWindow()
                    .setSoftInputMode(
                            WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
            Mannschaftsanzahl.clearFocus();
            Toast.makeText(CreateTableActivity.this,
                    "Dieser Liganame ist bereits vergeben",
                    Toast.LENGTH_SHORT).show();
        }
    }
}

Xamarin.Android के लिए मैंने इस एक्सटेंशन को बनाया है।

public static class ViewExtensions
{
    public static void FocusEditText(this EditText editText, Activity activity)
    {
        if (editText.RequestFocus())
        {
            InputMethodManager imm = (InputMethodManager)activity.GetSystemService(Context.InputMethodService);
            imm.ShowSoftInput(editText, ShowFlags.Implicit);
        }
    }
}

आप इसे एक ही पंक्ति से कर सकते हैं:

yourEditText.RequestFocusFromTouch();

डार्विंड कोड कीबोर्ड नहीं दिखाया।

यह मेरे लिए काम करता है:

        _searchText.requestFocus();
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(_searchText, InputMethodManager.SHOW_IMPLICIT);

यदि कीबोर्ड नहीं दिख रहा है, तो बल देने का प्रयास करें:

        imm.showSoftInput(_searchText, InputMethodManager.SHOW_FORCED);

बटन क्लिक होने पर यह EditText का फ़ोकस बदलता है:

public class MainActivity extends Activity {
    private EditText e1,e2;
    private Button b1,b2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        e1=(EditText) findViewById(R.id.editText1);
        e2=(EditText) findViewById(R.id.editText2);
        e1.requestFocus();
        b1=(Button) findViewById(R.id.one);
        b2=(Button) findViewById(R.id.two);
        b1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                e1.requestFocus();

            }
        });
        b2.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                e2.requestFocus();
            }
        });
    }
}

मुझे नहीं पता कि क्या आपको एक समाधान मिला है, लेकिन फिर से फ़ोकस करने के बाद आपकी संपादन समस्या के लिए:

क्या आपने अपने edittext1 पर विधि selectAll() या setSelection(0) (अगर setSelection(0) selectAll() विधि को कॉल करने का प्रयास किया है?

अगर यह मदद करता है तो कृपया मुझे बताएं, इसलिए मैं अपने उत्तर को एक पूर्ण समाधान में संपादित कर दूंगा।


यदि हम गतिशील रूप से एक संपादन टेक्स्ट बनाते हैं तो हमें नीचे दिए गए अनुरोध फोकस () को सेट करना होगा।

    EditText editText = new EditText(this);
    editText.setWidth(600);
    editText.requestFocus();

यदि पहले से ही हमने एक्सएमएल व्यू में घटक घोषित किया है तो हमें इसे खोजना होगा और हम नीचे दिए गए फोकस को कर सकते हैं।

EditText e1=(EditText) findViewById(R.id.editText1);
e1.requestFocus();

यह केवल इसी संपादन टेक्स्ट घटक पर ध्यान केंद्रित करता है।


    Button btnClear = (Button) findViewById(R.id.btnClear);

    EditText editText1=(EditText) findViewById(R.id.editText2);
    EditText editText2=(EditText) findViewById(R.id.editText3);

    btnClear.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {

            editText1.setText("");
            editText2.setText("");

            editText1.requestFocus();
        }
    });

    mEditText.setFocusableInTouchMode(true);
    mEditText.requestFocus();

    if(mEditText.requestFocus()) {
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    }

new OnEditorActionListener(){
   @Override
   public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
      editText.requestFocus();
      //used ******* return true ******
      return **true**;
   }
} 




android-edittext