2010-04-29 15 views
8

Escribí un Adaptador personalizado para una vista de lista, pero cuando intenté implementar el evento de clic para el elemento de la lista, encontré que no estaba respondiendo, me complacerá que alguien me sugiera una solución.setOnItemClickListener no responde Custom ListView

public class TourList extends ListActivity { 
.... 
setContentView(R.layout.tourlist); 
..... 





getListView().setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view,int position, long id) { 
        //i couldn't reach here 
      Log.v(TAG,"did u get me"); 
     } 
     }); 
adap = new MyAdapter(TourList.this,mylist); 
getListView().setAdapter(adap); 

y mi adaptador personalizado es

private class MyAdapter extends BaseAdapter { 

      ArrayList<HashMap<String,String>> elements; 
      Context ctx; 

      public MyAdapter(Context context, ArrayList<HashMap<String,String>> mylist) { 
        this.elements=mylist; 
        this.ctx=context; 
      } 

      public boolean isEnabled(int position){ 
       return true; 
         } 

      @Override 
      public int getCount() { 
       return elements.size(); 
       } 
      @Override 
      public Object getItem(int position) { 
       return elements.get(position); 
       } 
      @Override 
      public long getItemId(int position) { 
       return position; 
       } 
       @Override 
      public View getView(int position, View convertView, ViewGroup parent) { 
       View v = convertView; 
       if (convertView == null) { 
         LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
         v = vi.inflate(R.layout.rowfor_tourlist, null); 
       } 

        TextView in = (TextView)v.findViewById(R.id.intro); 
        TextView du = (TextView)v.findViewById(R.id.duration); 
        TextView pf = (TextView)v.findViewById(R.id.price); 
        TextView pn = (TextView)v.findViewById(R.id.product); 
        WebView wv=(WebView)v.findViewById(R.id.photo); 
        in.setText(Html.fromHtml(mylist.get(position).get("Intro"))); 
        du.setText(mylist.get(position).get("Duration")); 
        pf.setText(mylist.get(position).get("Price")); 
        pn.setText(mylist.get(position).get("Product")); 
        wv.getSettings().setJavaScriptEnabled(true); 
        wv.loadUrl(mylist.get(position).get("ImageURL")); 

       return v; 
      }   
     }//class 

y mi archivo tourlist.xml parece

<LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
      .... 
     > 

<ListView android:id="@id/android:list" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:background="@drawable/white" 
      android:cacheColorHint="#00000000" 
      android:layout_weight="1" 

      /> 
</...> 

Respuesta

3

Ver si this discusión ayuda ...

+0

agradecerán Samuh voy a comprobarlo – ganesh

1

La pregunta es realmente sencillo.

No se puede llamar setOnItemClickListenerantessetAdapter llamada porque ListView se apoya en sus hijos y sus hijos son desconocidos hasta que ajuste el adaptador.

Así que simplemente hacer como esto:

public class StatusListView extends ListView implements OnItemClickListener { 

    private StatusListAdapter adapter; 

    public StatusListView(Context context) { 
     super(context); 
     init(); 
    } 

    private void init() { 
     // do other things 
      ... 

     adapter = new StatusListAdapter(getContext(), R.layout.status_list_item, statuses); 
     // pay attention here 
     setAdapter(adapter); 
     setOnItemClickListener(this); 
    } 

    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
     StatusListAdapter adapter = (StatusListAdapter) ((ListView) adapterView).getAdapter(); 
     Status status = (Status) adapter.getItem(position); 
     Intent intent = new Intent(getContext(), CustomActivity.class); 
     intent.putExtra(C.extra_keys.status, status); 
     getContext().startActivity(intent); 
    } 

} 

De esta manera usted tendrá su evento en marcha y funcionando! Lo siento, pero no tuve tiempo de entrar en detalles en el código fuente de Android. Si lo hago, volveré a publicar.

chicos Bye, Alex

+0

i no lo creo. He desarrollado varias aplicaciones en las que configuré onItemClickListerner antes de configurar el adaptador. – Siddhesh

+0

Esto realmente resuelve mi problema, gracias. – sulai

+1

Si examina el código fuente nativa: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/widget/AdapterView.java#AdapterView .getOnItemClickListener% 28% 29, puede definir el oyente de clic antes del adaptador – Niko

Cuestiones relacionadas