onListItemClick no funciona para listview?

Hola onListItemClick para listview no funciona. Aquí estoy obteniendo datos de SQLite usando AsyncTask y mostrándolo en una vista de lista. Y quiero hacer algunas acciones cuando ha hecho clic en una lista en una lista. Pero el clic no está sucediendo. He intentado mucho por esto. Por favor, ayúdame. Aquí está mi código

package com.applexus.app.mobilesalesorder; import java.util.ArrayList; import java.util.Map; import java.util.TreeMap; import com.applexus.app.library.sql.SqlConnector; import android.app.ListActivity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.database.Cursor; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.inputmethod.EditorInfo; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.TextView.OnEditorActionListener; public class SoldToPartiesList extends ListActivity { private ArrayList data = new ArrayList(); private ArrayList idk = new ArrayList(); private ArrayList name1 = new ArrayList(); private ArrayList inco1 = new ArrayList(); private ArrayList email = new ArrayList(); private ArrayList tel = new ArrayList(); private ArrayList vwerk = new ArrayList(); private SharedPreferences prefs; private String prefNamesalesorgid = "salesorgid"; private String prefNamedistchnlid = "distchnlid"; private String prefNamedivid = "divid"; private String prefName = "mso"; private TextView titlename; private static class ViewHolder { TextView tvlist; TextView tvlistsmall; } private class EfficientAdapter extends BaseAdapter { private Context context; LayoutInflater inflater; public EfficientAdapter(Context context) { // TODO Auto-generated constructor stub this.context = context; inflater = LayoutInflater.from(context); } @Override public int getCount() { // TODO Auto-generated method stub return data.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return position; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ViewHolder holder; final int place = position; if (convertView == null) { convertView = inflater.inflate(R.layout.listso, null); holder = new ViewHolder(); holder.tvlist = (TextView) convertView .findViewById(R.id.textViewlist); holder.tvlistsmall = (TextView) convertView .findViewById(R.id.textView1); convertView.setTag(holder); // } else { holder = (ViewHolder) convertView.getTag(); } holder.tvlist.setText(idk.get(position)); holder.tvlistsmall.setText(data.get(position)); return convertView; } } Map map = new TreeMap(); SqlConnector con; String salorg; String distch; String division; Context co = this; Boolean searchable=false; TextView tvmc; TextView tvmn; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.materiallist); titlename = (TextView) findViewById(R.id.textViewtitle); titlename.setText(R.string.soldtoparties); tvmc=(TextView)findViewById(R.id.textViewmc); tvmn=(TextView)findViewById(R.id.textViewmn); prefs = getSharedPreferences(prefName, MODE_PRIVATE); salorg = (prefs.getString(prefNamesalesorgid, "")); distch = (prefs.getString(prefNamedistchnlid, "")); division=(prefs.getString(prefNamedivid, "")); DownloadWebPageTask task = new DownloadWebPageTask(); task.execute(new String[] { null }); // ListView lv=(ListView)findViewById(android.R.id.list); // lv.setOnItemSelectedListener(new ) } EditText es; LinearLayout ls; LinearLayout mc; LinearLayout mn; Boolean searchFlag = false; String search; @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); es = (EditText) findViewById(R.id.editTextSearch); ls = (LinearLayout) findViewById(R.id.linearLayoutsearch); } private class DownloadWebPageTasksearch extends AsyncTask { Cursor c; ProgressBar pb; @Override protected String doInBackground(String... urls) { con = new SqlConnector(co); try { if (searchFlag) { c = con.select("select Kunnr,Name,Name1,Inco1,Vwerk,SmtpAddr,Telf1 from tb_soldtoparties where salesorg='" + salorg + "' and channel='" + distch + "' and Name like '%"+search+"%' and division='"+division+"';"); } else { c = con.select("select Kunnr,Name,Name1,Inco1,Vwerk,SmtpAddr,Telf1 from tb_soldtoparties where salesorg='" + salorg + "' and channel='" + distch + "' and Kunnr like '%"+search+"%' and division='"+division+"';"); } } catch (Exception e) { e.printStackTrace(); } int in = c.getCount(); c.moveToFirst(); for (int i = 0; i < in; i++) { idk.add(c.getString(0)); data.add(c.getString(1)); name1.add(c.getString(2)); inco1.add(c.getString(3)); vwerk.add(c.getString(4)); email.add(c.getString(5)); tel.add(c.getString(6)); c.moveToNext(); } return null; } @Override protected void onPostExecute(String result) { setListAdapter(new EfficientAdapter(SoldToPartiesList.this)); pb = (ProgressBar) findViewById(R.id.progressBar1); pb.setVisibility(View.INVISIBLE); searchable=true; con.close(); } @Override protected void onPreExecute() { super.onPreExecute(); idk.clear(); data.clear(); name1.clear(); inco1.clear(); vwerk.clear(); email.clear(); tel.clear(); setListAdapter(new EfficientAdapter(SoldToPartiesList.this)); pb = (ProgressBar) findViewById(R.id.progressBar1); pb.setVisibility(View.VISIBLE); searchable=false; } } private class DownloadWebPageTask extends AsyncTask { Cursor c; ProgressBar pb; @Override protected String doInBackground(String... urls) { con = new SqlConnector(co); try { c = con.select("select Kunnr,Name,Name1,Inco1,Vwerk,SmtpAddr,Telf1 from tb_soldtoparties where salesorg='" + salorg + "' and channel='" + distch + "' and division='"+division+"';"); } catch (Exception e) { e.printStackTrace(); } int in = c.getCount(); c.moveToFirst(); Log.d("size", "" + in + ""); for (int i = 0; i < in; i++) { idk.add(c.getString(0)); data.add(c.getString(1)); name1.add(c.getString(2)); inco1.add(c.getString(3)); vwerk.add(c.getString(4)); email.add(c.getString(5)); tel.add(c.getString(6)); c.moveToNext(); } return null; } @Override protected void onPostExecute(String result) { setListAdapter(new EfficientAdapter(SoldToPartiesList.this)); pb = (ProgressBar) findViewById(R.id.progressBar1); pb.setVisibility(View.INVISIBLE); searchable=true; con.close(); } @Override protected void onPreExecute() { super.onPreExecute(); idk.clear(); data.clear(); name1.clear(); inco1.clear(); vwerk.clear(); email.clear(); tel.clear(); pb = (ProgressBar) findViewById(R.id.progressBar1); pb.setVisibility(View.VISIBLE); searchable=false; } } // class ClickOnList implements OnItemClickListener // { // @Override // public void onItemClick(AdapterView arg0, View arg1, int arg2, // long arg3) { // Log.d("ListView", "Position"+arg2); // // } // // } // public OnItemClickListener theListListener = new OnItemClickListener() { // // public void onItemClick(android.widget.AdapterView parent, View v, int position, long id) { // Log.d("position",position+""); // } }; @Override protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); int place=position; Log.d("position",position+""); } } 

Y el código de diseño es materiallist.xml

                                     

Y listso3.xml es

      

Agregue el código siguiente a su TextView en el XML

 android:focusableInTouchMode="false" android:clickable="false" android:focusable="false" 

e intenta de nuevo.

Otra solución simple: agregue android:descendantFocusability="blocksDescendants" al grupo de vista raíz.

Debería agregar android:focusable="false" para los elementos de la fila ListView para hacer ListView Clikable. Porque las vistas en la fila de ListView ganan el foco para que ListView no se pueda enfocar. Entonces, en tu caso puedes agregar android:focusable="false" a las TextViews de tu fila ListView.

Tenía los mismos síntomas, y eso me volvió loco por un tiempo. Agregar android:focusable="false" para los elementos de la lista como se sugirió anteriormente solucionó el problema.

Pero el problema real era que había establecido android:textIsSelectable="true" para mis elementos de la lista (en respuesta a una advertencia generada por Eclipse); setting android:textIsSelectable="false" solucionó el problema, y ​​no necesitaba la opción android:textIsSelectable="false" .

La solución alternativa que encontré evitar el

 AdapterView.OnItemClickListener mMessageClickedHandler=new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView< ?> parent, View view, int position, long id) { } }; 

en ListView , pero explota el constructor del adaptador que toma un Context como parámetro:

 myCustomAdapter=new MyCustomAdapter(ActivityName.this,...) 

Pasando ActivityName.this Esto es posible convertir el Context en la clase del adaptador como ActivityName de una manera segura y usar sus métodos funcionando como callbacks:

 ((ActivityName)context).activityMethod() 

Dado que el método getView() de la clase Adapter tiene un parámetro de position , es posible pasar este valor a activityMethod(int position) para saber qué elemento de la lista se ha presionado en la Actividad donde está ListView .

Otra solución. si tiene muchos controles secundarios, y tiene problemas para agregar android:focusable="false" a cada control secundario, puede agregar android:descendantFocusability="blocksDescendants" a su parent-control.try it.

Luché con esto por un tiempo; ninguna de las soluciones proporcionadas funcionó para mí. Al final encontré que tener una llamada a getListView() en mi método onViewCreated() hizo el truco, aunque no tengo idea de por qué. Esto es para un Fragmento en lugar de una Actividad; no estoy seguro si esto hace alguna diferencia.

 public class NewsListFragment extends ListFragment { private ListView listView; ... @Override public void onViewCreated(View view, Bundle savedInstanceState) { newsListView = getListView(); } @Override public void onListItemClick(ListView l, View v, int position, long id) { // this now works as expected } } 

También estaba luchando con este problema y ninguna de las soluciones sugeridas funcionó. Mi problema fue que hice una anulación para onViewCreated pero no llamé a super.onViewCreated(view, savedInstanceState); . Con suerte, esto ayudará a otra persona para que no se pasen horas tratando de descubrir qué está pasando.

Luché porque por error puse android: inputType = “textCapWords” con el cuadro de texto después de eliminarlo, se solucionó

Solo la línea siguiente funcionó para mí:

 android:descendantFocusability="blocksDescendants" 

Todo el list_view_item.xml:

 < ?xml version="1.0" encoding="utf-8"?>        

Lo anterior se debe usar en getView como:

 convertView=LayoutInflater.from(getContext()) .inflate(R.layout.list_view_item, parent, false); 

`