EditText in ListView wird nicht konzentriert bleiben

Ich habe ein EditText in jeder Zeile eines ListView . Aus irgendeinem Grund, wenn ich auf die EditText tippe, gewinnt es kurz Fokus, aber dann sofort verliert es.

Ich habe diese Dinge ausprobiert

  • Wie installiere ich Android SDK auf Ubuntu?
  • AppCompat v22.1.0 nicht alle XML-Widgets korrekt für Fragmente
  • Teilen Sie Cookies zwischen webview und chrom
  • DialogFragment-Set Höhe von Dialog
  • Android: Wie synchronisiere man mit Bolts von Parse.com?
  • Deaktiviere einen Schlüssel auf der benutzerdefinierten Tastatur in Android
  •  listView.setItemsCanFocus(true); editText.setFocusable(true); 

    Während der EditText (kurz) fokussiert ist, erscheint die Enter Taste Next und die auto-correct bar ist vorhanden. Wenn es den Fokus verliert, bleibt die Softtastatur hoch, aber die Enter Taste wird ein Return Arrow , und die auto-correct bar verschwindet.

  • Zeichnen Sie durch Text in Textansicht
  • Android-Dialog: Titelleiste entfernen
  • Was ist der Unterschied zwischen Acitvity_Main.xml und Fragment_main.xml Dateien in Android Studio
  • Robolectric 3.0, konnte keine Funktion testen, die ein HandlerThread startet
  • Android: ListView mit Schaltflächen -> OnItemClick nichts tun
  • Android HttpPost: Wie bekomme ich das Ergebnis?
  • 3 Solutions collect form web for “EditText in ListView wird nicht konzentriert bleiben”

    EditText s in ListView s sind extrem schwierig. Ich würde vorschlagen, Sie vermeiden sie wie die Pest, wenn möglich. Als ich mit ihnen verwirrte, war diese Antwort aber hilfreich. Wenn du nur ein paar Gegenstände hast, kannst du immer nur einen ScrollView .

    Wenn du List Items willst, um den Fokus zu nehmen, ist es ziemlich einfach: Machen Sie die Listview nicht fokussierbar und sagen Sie, dass ihr Fokus afterDescendants die EditText s und andere fokussierbare Items fokussieren lassen.

     <ListView android:layout_width="fill_parent" android:layout_height="wrap_content" android:descendantFocusability="afterDescendants" android:focusable="false" /> 

    Ich weiß, diese Frage ist alt, aber ich kämpfte auch heute mit EditText und ListView. Ich denke, verliere Zeit mit Fokus Problem oder Aktualisierung Datensatz ist das Ende der Zeile.

    Also habe ich eine Aktivität erstellt und die Kontrollen, die ich brauche, dynamisch hinzugefügt. In diesem Beispiel habe ich zwei Kontrollen hinzugefügt: eine Textansicht und ein Edittext.

    Zuerst schaffe ich eine Klasse, um ein "Container" der Kontrollen zu sein, und sie habe ich die Bedienelemente auf einem ScrollView.

    Die Datei layout.xml:

      <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/llMain" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/tvHeader" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Large Text" android:textAppearance="?android:attr/textAppearanceLarge" /> <ScrollView android:id="@+id/svMain" android:layout_width="fill_parent" android:layout_height="wrap_content" > <LinearLayout android:id="@+id/llForm" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > </LinearLayout> </ScrollView> </LinearLayout> 

    Die "Containter" -Klasse:

     import android.widget.EditText; public class RespostasArray { private int pergunta; private int formulario; private int form_coord; private int coordenada; private int form_resposta; private String questao; private String resposta; private EditText respostaEdit; public RespostasArray() { respostaEdit = null; } public int getPergunta() { return pergunta; } public void setPergunta(int pergunta) { this.pergunta = pergunta; } public int getFormulario() { return formulario; } public void setFormulario(int formulario) { this.formulario = formulario; } public int getForm_coord() { return form_coord; } public void setForm_coord(int form_coord) { this.form_coord = form_coord; } public int getCoordenada() { return coordenada; } public void setCoordenada(int coordenada) { this.coordenada = coordenada; } public int getForm_resposta() { return form_resposta; } public void setForm_resposta(int form_resposta) { this.form_resposta = form_resposta; } public String getQuestao() { return questao; } public void setQuestao(String questao) { this.questao = questao; } public String getResposta() { return resposta; } public void setResposta(String resposta) { this.resposta = resposta; } public EditText getRespostaEdit() { return respostaEdit; } public void setRespostaEdit(EditText respostaEdit) { this.respostaEdit = respostaEdit; } } 

    Also, die Haupttätigkeit:

      import java.util.ArrayList; import java.util.List; import jv.android.getpoint.R; import jv.android.getpointlib.data.Formularios; import jv.android.getpointlib.data.GetPointDataHelper; import jv.android.getpointlib.data.Respostas; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.KeyEvent; import android.view.WindowManager.LayoutParams; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; public class RespostasActivity extends Activity { private Intent intent; private ArrayList<RespostasArray> listItems = null; private GetPointDataHelper db = null; private int coordenada = -1; private int formulario = -1; private LinearLayout llRespostas; private TextView tvRespostasHeader; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout.xml); llRespostas = (LinearLayout)findViewById(R.id.llRespostas); tvHeader = (TextView)findViewById(R.id.tvHeader); listItems = new ArrayList<RespostasArray>(); db = new GetPointDataHelper(this, false); intent = getIntent(); if (intent != null) { Bundle params = intent.getExtras(); if (params != null) { coordenada = params.getInt("coordenada"); formulario = params.getInt("formulario"); tvHeader.setText("Some header"); // Load the fields I need from SQLite. Change it to your needs. List<Respostas> respostas = db.selectAllRespostaDaCoordenada (coordenada, formulario); if (respostas != null && respostas.size() > 0) { for (int i = 0; i < respostas.size(); i++) { TextView tv = new TextView(getApplicationContext()); tv.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); tv.setText(respostas.get(i).getQuestao().trim() + (respostas.get(i).getQuestao().trim().endsWith(":") ? "" : ":")); llRespostas.addView(tv); EditText et = new EditText(getApplicationContext()); et.setText(respostas.get(i).getResposta().trim()); et.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); llRespostas.addView(et); RespostasArray ra = new RespostasArray(); ra.setCoordenada(respostas.get(i).getCoordenada()); ra.setForm_coord(respostas.get(i).getForm_coord()); ra.setForm_resposta(respostas.get(i).getForm_resposta()); ra.setFormulario(respostas.get(i).getFormulario()); ra.setPergunta(respostas.get(i).getPergunta()); ra.setQuestao(respostas.get(i).getQuestao()); ra.setResposta(respostas.get(i).getResposta()); ra.setRespostaEdit(et); listItems.add(ra); } } } } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { doProcessResult(); } return super.onKeyDown(keyCode, event); } private void doProcessResult() { for (int i = 0; i < listItems.size(); i++) { if (listItems.get(i).getForm_resposta() == 0) { db.insertResposta(listItems.get(i).getFormulario(), listItems.get(i).getForm_coord(), listItems.get(i).getPergunta(), listItems.get(i).getRespostaEdit().getText().toString()); } else { db.updateResposta(listItems.get(i).getForm_resposta(), listItems.get(i).getRespostaEdit().getText().toString()); } } } } 

    Ich hoffe es hilft jemandem.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.