java - llenar - listview desplegable android studio
ListView OnItemClickListener no responde? (13)
Como solución alternativa que funcionó para mí, puede intentar ampliar su adaptador desde BaseAdapter
(iso implementando la interfaz ListAdapter
)
He buscado una solución en todas partes, pero no puedo encontrar la manera de implementarlo. Mi OnItemClickListener
se ha desactivado de alguna manera en mis filas de ListView
, porque tengo un ImageButton
en el diseño de la fila, que se encarga del enfoque. Ha habido muchas preguntas que he encontrado, pero ninguna me ha llevado a ninguna parte.
He comprobado this pregunta, pero realmente no pude entenderlo. Solo necesito una manera de hacer clic en las filas para que pueda detectar cuándo se presiona una fila. La presión prolongada y el enfoque funcionan bien.
El uso de ScrollView
puede evitar que onItemClickListener
reciba la entrada.
Espero que esto ayude a cualquiera.
En lugar de un OnItemClickListener , agregue un OnClickListener a cada una de sus vistas devueltas desde su adaptador. Tendrá que usar setItemsCanFocus
configurar su lista:
ListView list = (ListView) findViewById(R.id.myList);
list.setAdapter(new DoubleClickAdapter(this));
list.setItemsCanFocus(true);
y luego en getView
su adaptador , esto producirá una fila seleccionable. Se supone que el botón está en el xml inflado.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = View.inflate(context, R.layout.cell, null);
view.setClickable(true);
view.setFocusable(true);
view.setBackgroundResource(android.R.drawable.menuitem_background);
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new AlertDialog.Builder(context).setTitle("touched").show();
}
});
return view;
}
Esto definitivamente funcionará. Agregue esto a la definición del diseño.
android:descendantFocusability="blocksDescendants"
Encontré la solución here
He ImageButton
y setFocusable="false"
en la definición de diseño no funcionó para mí. Resolvió llamar a setFocusable(false)
en el constructor de la subclase.
La mejor forma de hacerlo es esto:
android:focusable="false"
android:focusableInTouchMode="false"
establece estas propiedades para ese Imagebutton
y prueba. yo
La siguiente línea resolvió el problema en mi proyecto:
<TextView ... android:textIsSelectable="false" />
Para mi versión de este problema, el problema era que había establecido mi objeto TextView
en android:inputType="textMultiLine"
. Cuando eliminé esta línea, desapareció el problema de que no se podía hacer clic en la lista. Parece un pequeño error desagradable.
Además, todavía puedo usar las android:minLines/android:maxLines
sin problema, por lo que no es un gran problema. Simplemente no es la solución que esperaba.
Ponga este código ImageView nextpage= (ImageView)findViewById(R.id.btnEdit);
en lugar de ImageButton
. ahora el elemento de la lista está activo
Probé la siguiente solución en SDK niveles 8 y 16.
En getView()
setFocusable(false);
setClickable(false);
en lugar de establecerlas como verdaderas en getView()
del Adaptador, hace lo que creo que quería la pregunta original, y significa que se llama a OnItemClickListener
, siempre que OnClickListener
no esté configurado en getView()
.
Supongo que todo lo que puede hacer en OnClickListener
una Vista lo puede hacer con la misma facilidad en OnItemClickListener
ListView
. ( setOnClickListener
en una Vista establece implícitamente que se puede hacer clic en la vista, lo que impide que se OnItemClickListener
correspondiente OnItemClickListener
ListView
, aparentemente).
El comportamiento es como uno esperaría, en términos del estado visual del ImageButton
cuando se presiona o se voltea el elemento.
La solución es una ligera ilusión, ya que es el elemento de la lista que se está presionando, no el ImageButton
mismo, por lo que si el botón no ocupa todo el elemento de la lista, al hacer clic en otro elemento . Lo mismo para el enfoque. Ese podría ser un precio que vale la pena pagar.
Una alternativa para configurar un OnClickListener
para cada vista es NO usar un ImageButton
; use un ImageView
lugar. ImageView
aún puede enviar eventos a OnClickListener
y no tomará el control.
configura el ImageButton
tu ImageButton
:
android:focusable="false"
Como AbsListView.onTouchEvent
comprueba child.hasFocusable()
.
listView= (ListView) findViewById(R.id.listview_names);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
Toast.makeText(getBaseContext(),"Clicked Button",Toast.LENGTH_LONG).show();
Log.d("h","clicked");
/* Intent intent=new Intent(MainActivity.this,Display_data.class);
intent.putExtra("NAME",n);
intent.putExtra("AGE",a);
startActivity(intent);*/
}
});
Y esta tostada no está funcionando