2016-05-06 9 views
0

So habe ich eine EditText und eine ListView darunter. Ich höre auf die KEYCODE_ENTER gedrückt werden und danach, ich bin ein Eintrag in der Listview-Adapter hinzufügen und notifyDataSetChanged() Methode aufrufen. Überraschenderweise, aber danach, wird der allererste Punkt in der Listenansicht fokussiert anstatt zuvor fokussiert auf EditText.ListView Stealing Fokus Formular EditText nach dem erneuten Laden

Hier ist mein Layout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="vertical"> 

    <EditText 
     android:id="@+id/edit_text" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:imeOptions="actionSearch" 
     android:singleLine="true"/> 

    <ListView 
     android:id="@+id/list_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

</LinearLayout> 

Hier ist, was ich tun, wenn die Enter-Taste

mTextEdit.setOnKeyListener(new View.OnKeyListener() { 
    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 

     if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) { 


      // modifying data set 
      onScanDataReceived(mTextEdit.getText().toString().trim()); 

      BaseAdapter adapter = (BaseAdapter) mListView.getAdapter(); 

      adapter.notifyDataSetChanged(); 

      mTextEdit.setText(null); 

      return true; 
     } 

     return false; 
    } 
}); 

Das Problem ist eindeutig mit Listview Nachladen gedrückt wird, denn wenn ich adapter.notifyDataSetChanged(); die Zeile aus kommentieren den Fokus ist immer noch auf der EditText.

Gibt es eine Methode, um den Fokus auf EditText nach dem erneuten Laden der ListView zu halten?

P.S. Ich habe versucht, Anruf requestFocus() auf dem editText, nachdem ich die Daten ohne Erfolg neu zu laden.

Antwort

0

die Sie interessieren,

mTextEdit.setOnKeyListener(new View.OnKeyListener() { 

     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 

      if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) { 


       // modifying data set 
       onScanDataReceived(mTextEdit.getText().toString().trim()); 

       BaseAdapter adapter = (BaseAdapter) mListView.getAdapter(); 

       adapter.notifyDataSetChanged(); 

       mTextEdit.setText(null); 
       Handler mHandler = new Handler(); 
       mHandler.postDelayed(
         new Runnable() { 
          @Override 
          public void run() { 
           mTextEdit.requestFocus(); 
          } 
         } 
         , 50 // 50...for delay in my case 
       ); 

       return true; 
      } 

      return false; 
     } 
    }); 
+0

Nun, das wird definitiv funktionieren (nicht immer, da die Verzögerungszeit ziemlich willkürlich ist), aber ich suchte nach einem 'kugelsicheren' Ansatz. – evil159

+0

Egal, es funktioniert, ich habe beschlossen, mit sicheren 200ms zu bleiben. – evil159

0

Versuchen mit diesem

Wenn Sie auch mit Softkeyboard konzentrieren möchten. Schreiben Sie die folgenden Codes nach oben Code

final InputMethodManager inputMethodManager = (InputMethodManager) context 
      .getSystemService(Context.INPUT_METHOD_SERVICE); 
inputMethodManager.showSoftInput(mTextEdit, InputMethodManager.SHOW_IMPLICIT); 
+0

Ich kümmere mich nicht um die Softkeyboard, wie ich ein anderes Mittel Eingang bin mit. Und 'setFocusableInTouchMode' auf' true' zu ​​setzen hilft in meinem Fall leider nicht. – evil159