2010-04-29 25 views
8

के लिए प्रतिक्रिया नहीं दे रहा है मैंने एक सूचीदृश्य के लिए एक कस्टम एडाप्टर लिखा है, लेकिन जब मैंने सूची आइटम के लिए क्लिक इवेंट लागू करने का प्रयास किया, तो मैंने पाया कि यह प्रतिक्रिया नहीं दे रहा है, अगर कोई मुझे समाधान का सुझाव दे तो मुझे खुशी होगी।setOnItemClickListener कस्टम लिस्ट व्यू

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

और अपने कस्टम एडाप्टर

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 

है और मेरी tourlist.xml फ़ाइल लग रहा है

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

      /> 
</...> 

उत्तर

3

की तरह देखने के लिए कि this चर्चा में मदद करता है ...

+0

आप samuh मैं इसे बाहर की जाँच करेगा – ganesh

1

सवाल वास्तव में है सरल।

आप क्योंकि ListView अपने बच्चों पर निर्भर करता है और जब तक आप एडाप्टर सेट अपने बच्चों अज्ञात हैं कॉल कॉल नहीं कर सकते setOnItemClickListenerसे पहलेsetAdapter।

तो बस इस तरह कार्य करें:

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

} 

इस तरह आप अपने घटना है और चल होगा! क्षमा करें, लेकिन मुझे एंड्रॉइड स्रोत कोड में विस्तार से जाने का समय नहीं था, अगर मैं फिर से पोस्ट करूंगा।

अलविदा दोस्तों, एलेक्स

+0

मैं ऐसा नहीं सोचता धन्यवाद। मैंने एडाप्टर सेट करने से पहले विभिन्न ऐप विकसित किए हैं जिनमें मैंने इटैमक्लिक लिस्टरर पर सेट किया है। – Siddhesh

+0

यह वास्तव में मेरी समस्या हल करता है, धन्यवाद। – sulai

+1

मूल स्रोत कोड को देख रहे हैं: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/widget/AdapterView.java#AdapterView .getOnItemClickListener% 28% 2 9, आप एडाप्टर से पहले क्लिक श्रोता को परिभाषित कर सकते हैं – Niko

संबंधित मुद्दे