EditText внутри ListView не будет сфокусирован

У меня есть EditText внутри каждой строки ListView . По какой-то причине, когда я нажимаю EditText, он ненадолго получает фокус, но затем сразу же теряет его.

Я пробовал эти вещи:

 listView.setItemsCanFocus(true); editText.setFocusable(true); 

В то время как EditText (кратко) сфокусирован, клавиша Enter говорит « Next и присутствует auto-correct bar . Когда он теряет фокус, мягкая клавиатура остается вверх, но клавиша Enter становится Return Arrow , и auto-correct bar исчезает.

Solutions Collecting From Web of "EditText внутри ListView не будет сфокусирован"

EditText s в ListView s чрезвычайно сложно. Я предлагаю вам избегать их, как чуму, если это возможно. Когда я возился с ними, этот ответ был полезен, хотя. Если у вас есть только несколько элементов, вы всегда можете просто использовать ScrollView .

Если вы хотите, чтобы элементы списка делали фокус, его довольно прямолинейно: сделайте listview неактивным и скажите, что его фокус – это afterDescendants который позволяет EditText s и другим сосредоточенным элементам сфокусироваться.

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

Я знаю, что этот вопрос старый, но я также сражался с EditText и ListView сегодня. Я думаю, что потерять время с проблемой фокуса или обновлением набора данных – это конец строки.

Итак, я создал Activity и динамически добавил элементы управления, которые мне нужны. В этом примере я добавил два элемента управления: textview и edittext.

Сначала я создаю класс как «контейнер» элементов управления, и я помещаю элементы управления в ScrollView.

Файл 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> 

Класс «сдерживания»:

 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; } } 

Итак, основная деятельность:

  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()); } } } } 

Надеюсь, это поможет кому-то.