2010-04-29 4 views
8

J'ai écrit un adaptateur personnalisé pour une liste, mais quand j'ai essayé d'implémenter l'événement de clic pour l'élément de liste, j'ai trouvé qu'il ne répondait pas, je serai heureux si quelqu'un me propose une solution.setOnItemClickListener ne répond pas pour ListView personnalisé

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); 

et mon adaptateur personnalisé est

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 

et mon fichier tourlist.xml ressemble

<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" 

      /> 
</...> 

Répondre

3

Voir si this discussion aide ...

+0

merci samuh je vais vérifier – ganesh

1

La question est vraiment simple.

Vous ne pouvez pas appeler setOnItemClickListeneravantsetAdapter appel parce ListView repose sur ses enfants et ses enfants ne sont pas connus jusqu'à ce que vous définissez l'adaptateur.

donc simplement faire comme ceci:

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 cette façon, vous aurez votre événement et en cours d'exécution! Désolé, mais je n'ai pas le temps d'aller en détail dans le code source Android, si je le ferai, je vais poster à nouveau.

gars Bye, Alex

+0

je ne pense pas. J'ai développé diverses applications dans lesquelles j'ai mis onItemClickListerner avant de régler l'adaptateur. – Siddhesh

+0

Cela résout en fait mon problème, merci. – sulai

+1

En regardant le code source natif: 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, vous pouvez définir l'écouteur de clic avant l'adaptateur – Niko

Questions connexes