2010-04-29 16 views
8

Napisałem niestandardową kartę do przeglądania listy, ale kiedy próbowałem wdrożyć zdarzenie click dla elementu listy, stwierdziłem, że nie odpowiada, będę zadowolony, jeśli ktoś zaproponuje mi rozwiązanie.setOnItemClickListener nie odpowiada dla 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); 

i mój zwyczaj adapter jest

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 

i mój plik tourlist.xml wygląda

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

      /> 
</...> 

Odpowiedz

3

Zobacz czy this dyskusja pomaga ...

+0

dziękuję samuh będę to sprawdzić – ganesh

1

Pytanie jest naprawdę prosty.

nie można nazwać setOnItemClickListenerprzedsetAdapter połączenia ListView, ponieważ opiera się na jego dzieci i jego dzieci nie są znane aż ustawisz adaptera.

Więc po prostu zrobić tak:

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

} 

W ten sposób będziesz miał swoje wydarzenie i działa! Przepraszam, ale nie miałem czasu szczegółowo opisywać kodu źródłowego Androida, jeśli chcę, to jeszcze raz opublikuję.

Bye faceci, Alex

+0

Nie sądzę. Rozwinąłem różne aplikacje, w których ustawiłem opcję onItemClickListerner przed ustawieniem adaptera. – Siddhesh

+0

To faktycznie rozwiązuje mój problem, dziękuję. – sulai

+1

Patrząc na macierzysty kod źródłowy: 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, możesz zdefiniować detektor kliknięcia przed adapterem – Niko

Powiązane problemy