¿Cómo manejar el evento click en Listview en android?

El siguiente es mi código de prueba para crear la vista de lista, la visualización de la lista de visualización con éxito, sin embargo, hay error en el evento de clic. Me gustaría crear una intención de enviar un mensaje de código duro a una nueva actividad. Sin embargo, muestra error para la línea

Intent intent = new Intent(context, SendMessage.class); 

Por lo tanto, el problema es, ¿qué debo proporcionar para esta clase?

Además, en lugar de código duro el mensaje de salida, ¿cómo capturar los datos en la fila de vista de lista y pasar a la nueva actividad? Por ejemplo BBB,AAA,R.drawable.tab1_hdpi para la primera fila.

Gracias.

 public class MainActivity extends Activity { public final static String EXTRA_MESSAGE = "com.example.ListViewTest.MESSAGE"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ArrayList<ListEntry> members = new ArrayList<ListEntry>(); members.add(new ListEntry("BBB","AAA",R.drawable.tab1_hdpi)); members.add(new ListEntry("ccc","ddd",R.drawable.tab2_hdpi)); members.add(new ListEntry("assa","cxv",R.drawable.tab3_hdpi)); members.add(new ListEntry("BcxsadvBB","AcxdxvAA")); members.add(new ListEntry("BcxvadsBB","AcxzvAA")); members.add(new ListEntry("BcxvBB","AcxvAA")); members.add(new ListEntry("BvBB","AcxsvAA")); members.add(new ListEntry("BcxvBB","AcxsvzAA")); members.add(new ListEntry("Bcxadv","AcsxvAA")); members.add(new ListEntry("BcxcxB","AcxsvAA")); ListView lv = (ListView)findViewById(R.id.listView1); Log.i("testTag","before start adapter"); StringArrayAdapter ad = new StringArrayAdapter (members,this); Log.i("testTag","after start adapter"); Log.i("testTag","set adapter"); lv.setAdapter(ad); lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(context, SendMessage.class); String message = "abc"; intent.putExtra(EXTRA_MESSAGE, message); startActivity(intent); } }); } 

No puedo ver dónde declaras el context . Para el propósito de la creación de la intención, puede usar MainActivity.this

  lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(MainActivity.this, SendMessage.class); String message = "abc"; intent.putExtra(EXTRA_MESSAGE, message); startActivity(intent); } }); 

Para recuperar el objeto sobre el que ha hecho clic puede utilizar el AdapterView :

 ListEntry entry = (ListEntry) parent.getItemAtPosition(position); 

ListView tiene la devolución de llamada Listener de clic de artículo. Debe establecer el onItemClickListener en ListView . La devolución de llamada contiene AdapterView y la position como parámetro. Que puede darle el ListEntry .

 lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ListEntry entry= (ListEntry) parent.getAdapter().getItem(position); Intent intent = new Intent(MainActivity.this, SendMessage.class); String message = entry.getMessage(); intent.putExtra(EXTRA_MESSAGE, message); startActivity(intent); } }); 

El error está viniendo en su código de esta declaración como usted dijo

 Intent intent = new Intent(context, SendMessage.class); 

Esto se debe a que está proporcionando el contexto de OnItemClickListener clase anónima en el constructor Intent, pero de acuerdo con el constructor de intención

 android.content.Intent.Intent(Context packageContext, Class<?> cls) 

Debe proporcionar el contexto de la actividad en la que está utilizando la intención que es el contexto de la clase MainActivity. Por lo que su declaración que está dando error se convertirá en

 Intent intent = new Intent(MainActivity.this, SendMessage.class); 

También para enviar su mensaje desde esta clase MainActivity a SendMessage, por favor vea abajo el código

 lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ListEntry entry= (ListEntry) parent.getAdapter().getItem(position); Intent intent = new Intent(MainActivity.this, SendMessage.class); intent.putExtra(EXTRA_MESSAGE, entry.getMessage()); startActivity(intent); } }); 

Por favor, hágamelo saber si esto le ayuda

EDIT: – Si usted está encontrando algún problema para obtener el valor de la lista de hacer una cosa declear su lista de matrices

 ArrayList<ListEntry> members = new ArrayList<ListEntry>(); 

Globalmente es decir antes de crear y cambiar su oyente como a continuación

  lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(MainActivity.this, SendMessage.class); intent.putExtra(EXTRA_MESSAGE, members.get(position)); startActivity(intent); } }); 

Así que su código completo se verá como

 public class MainActivity extends Activity { public final static String EXTRA_MESSAGE = "com.example.ListViewTest.MESSAGE"; ArrayList<ListEntry> members = new ArrayList<ListEntry>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); members.add(new ListEntry("BBB","AAA",R.drawable.tab1_hdpi)); members.add(new ListEntry("ccc","ddd",R.drawable.tab2_hdpi)); members.add(new ListEntry("assa","cxv",R.drawable.tab3_hdpi)); members.add(new ListEntry("BcxsadvBB","AcxdxvAA")); members.add(new ListEntry("BcxvadsBB","AcxzvAA")); members.add(new ListEntry("BcxvBB","AcxvAA")); members.add(new ListEntry("BvBB","AcxsvAA")); members.add(new ListEntry("BcxvBB","AcxsvzAA")); members.add(new ListEntry("Bcxadv","AcsxvAA")); members.add(new ListEntry("BcxcxB","AcxsvAA")); ListView lv = (ListView)findViewById(R.id.listView1); Log.i("testTag","before start adapter"); StringArrayAdapter ad = new StringArrayAdapter (members,this); Log.i("testTag","after start adapter"); Log.i("testTag","set adapter"); lv.setAdapter(ad); lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(MainActivity.this, SendMessage.class); intent.putExtra(EXTRA_MESSAGE, members.get(position).getMessage()); startActivity(intent); } }); } 

Donde getMessage () será un método getter especificado en su clase ListEntry que está utilizando para obtener el mensaje que se estableció previamente.

En primer lugar, la clase debe implementar el oyente de clics:

 implements OnItemClickListener 

A continuación, establezca un listener en ListView

 yourList.setOnItemclickListener(this); 

Y, finalmente, crear el método clic:

 @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(MainActivity.this, "You Clicked at ", Toast.LENGTH_SHORT).show(); } 
  //get main activity final Activity main_activity=getActivity(); //list view click listener final ListView listView = (ListView) inflatedView.findViewById(R.id.listView_id); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String stringText; //in normal case stringText= ((TextView)view).getText().toString(); //in case if listview has separate item layout TextView textview=(TextView)view.findViewById(R.id.textview_id_of_listview_Item); stringText=textview.getText().toString(); //show selected Toast.makeText(main_activity, stringText, Toast.LENGTH_LONG).show(); } }); //populate listview 

Según mi prueba,

  1. Implementa OnItemClickListener -> funciona.

  2. SetOnItemClickListener -> funciona.

  3. ListView se puede hacer clic de forma predeterminada (API 19)

Lo importante es que "click" sólo funciona con TextView (si elige simple_list_item_1.xml como elemento). Esto significa que si proporciona datos de texto para el ListView, "haga clic" funciona cuando hace clic en el área de texto. Haga clic en el área vacía no desencadena "evento de clic".

 listView.setOnItemClickListener(this); @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { String typeMap=((TextView) view).getText().toString(); } 
  • Mostrar alertDialog con los botones de radio cuando haga clic en un listViewItem
  • Haga clic en largo Haga clic en span no disparar hasta que se haga clic
  • Android GridView OnItemLongClick escuchador llamado después de OnItemClick
  • Ignore OnItemSelectedListener encendiendo en crear
  • OnItemClickListener () no funciona con el adaptador de lista
  • Recyclerview addOnItemTouchListener obtiene la vista previa que se hace clic en la fila
  • Android onItemClickListener no funciona (No se pueden enfocar en el código)
  • Cómo abrir diferentes actividades al hacer clic en los elementos del cajón de navegación?
  • No se puede obtener gridView en el elemento de escucha de clics
  • Autocompletetextview setonitemselectedlistener no funciona
  • Selected Item of Autocomplete Textview Mostrar como simple Textview?
  • Interesting Posts
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.