Cómo ocultar varios cursores al mostrar un EditText dentro de un ListView?

He creado un ListView cuyos hijos consisten en un solo EditText. Sin embargo, cuando hago clic en el EditText, dándole el foco, entonces notifyDataSetChanged() , actualizando el ListView, entonces chascar encendido cualquiera de los EditTexts otra vez, un cursor se dibuja para cada EditText en la lista (Nexus 5, emuladores, etc.)

En un Nexus 5 Nexus 5

Los siguientes son mi xml para la lista y el elemento de la lista.

Activity_main.xml

 <ListView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.zlistfocus.MainActivity" tools:ignore="MergeRootFrame" /> 

Listview_item.xml

 <?xml version="1.0" encoding="utf-8"?> <EditText xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tv" android:layout_width="match_parent" android:layout_height="40dp" android:paddingBottom="4dp" android:paddingLeft="8dp" android:paddingRight="8dp" android:paddingTop="4dp" /> 

Como quiero que EditText pueda concentrarse, seguí algunos consejos e indicaciones aquí: https://stackoverflow.com/a/4901683/499125 . Específicamente, he añadido android:windowSoftInputMode="adjustNothing" a la etiqueta Activity en AndroidManifest.xml para que los elementos de la lista puedan obtener el foco en absoluto, creando este problema. A continuación, traté de adjuntar OnItemSelectedListener a la lista como la respuesta seleccionada sugerido. Sin embargo, estos cursores fantasma todavía existe.

@AnswerBot: Estoy usando un ArrayAdapter, que contiene una lista de enteros.

 public class MainActivity extends ActionBarActivity { private ListView lv; private ArrayAdapter<Integer> adapter; private List<Integer> data = new ArrayList<Integer>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.lv); adapter = new ArrayAdapter<Integer>(this, R.layout.listview_item, R.id.tv, data); lv.setAdapter(adapter); } @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, 1, 0, "Refresh"); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == 1) { getSomeData(); return true; } return super.onOptionsItemSelected(item); } private void getSomeData() { if (data.isEmpty()) { for (int i = 0; i < 20; i++) { data.add(i); } } else { int start = data.get(data.size() - 1) + 1; for (int i = 0; i < 20; i++) { data.set(i, start + i); } } adapter.notifyDataSetChanged(); } } 

Puede ocultar el cursor de un EditText llamando a setCursorVisible (false) en el EditText (s) en cuestión.

Edit: Para esto, es probable que desee utilizar un adaptador personalizado ( BaseAdapter ), y en el método getView hacer algo como esto:

 @Override public View getView(final int position, View convertView, ViewGroup parent) { ... editText.setCursorVisible(editText.hasFocus()); return convertView; } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.