2012-07-21 11 views
5

मेरे पास एक कस्टम ListView है जिसमें Button है। इस बटन का कार्य हटाएं बटन है। जब भी उपयोगकर्ता इस बटन पर क्लिक करता है, तो वर्तमान पंक्ति हटा दी जाएगी।एक सूची दृश्य पर बटन के ऑनक्लिक लिस्टनर विधि का उपयोग कैसे करें

  • मैं यह कैसे कर सकता हूं?
  • मैं इस बटन के लिए onClickListener कैसे सेट कर सकता हूं?
  • मैं इस आईडी पर पंक्ति आईडी कैसे पकड़ सकता हूं?

अग्रिम धन्यवाद।

+0

'setOnItemClickListener()' सूचीदृश्य पर यदि u केवल पंक्ति आईडी – MAC

+0

जरूरत है ([इस उदाहरण देखें] http://samir-mangroliya.blogspot.in/p/android-customized-listview.html) –

उत्तर

7

अपने कस्टम adapater वर्ग के getView()

buttonDelete.setOnClickListener(new OnClickListener() 
{ 
    @Override 
    public void onClick(View v) 
    { 
    // Use position parameter of your getView() in this method it will current position of Clicked row button 
    // code for current Row deleted...    
    } 
}); 
+0

जो मुझे पहले खोजने की जरूरत है ById? –

+0

@PaulBrewczynski पाठ्यक्रम से बाहर – sudoman281

1

अपने एडाप्टर वर्ग के getView विधि के अंदर इस का प्रयोग करें में।

holder.button.setOnClickListener(new OnClickListener() 
{ 
    @Override 
    public void onClick(View v) 
    { 

    } 
}); 
4

सबसे पहले, यह आपके लिए इस आइटम पर क्लिक को संभालने के लिए बहुत आसान होगा। आपको बस एक श्रोता जोड़ना होगा: myButton.setOnClickListener(mBuyButtonClickListener)। यह क्रिया आमतौर पर आपके ListView के getView(...) कार्यान्वयन पर की जाती है।

आपका श्रोता यह जान सकता है कि myListView.getPositionForView(myButton) का उपयोग कर बटन की आइटम स्थिति क्या है। श्रोता के इस नमूने को देखो:

private OnClickListener mBuyButtonClickListener = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     final int position = getListView().getPositionForView(v); 
     if (position != ListView.INVALID_POSITION) { 
      //DO THE STUFF YOU WANT TO DO WITH THE position 
     } 
    } 
}; 

जब ऐसा होता है, तो आप आइटम ही है और कुछ अन्य स्पर्श घटना प्रसार पर क्लिक संभालने के लिए समस्या नहीं होनी चाहिए।

तो, आपको this article पढ़ना चाहिए जो ListView के अंदर कई स्पर्श करने योग्य क्षेत्रों के उपयोग का पूरी तरह से वर्णन करता है। यह बहुत उपयोगी होगा।

1

मैंने हर जगह देखा और जवाबों में से किसी ने मुझे तब तक मदद की जब तक कि कोई नहीं किया।

था क्या मैं एक HolderView बनाने था और adpater के getView mathod में अपने सभी textviews और अन्य विगेट्स ऊपर लपेट:

static class ViewHolder 
{ 
    TextView text1; 
    TextView text2; 
    TextView text3; 
} 

और मैं भी एक ही decalared:

में इस वर्ग डाल लोगों को आम तौर पर वे अब अलग कर रहे हैं के रूप में:

TextView text1; 
TextView text2; 
TextView text3; 

तो getView में लेआउट बढ़ा-चढ़ाकर के बाद सभी दृश्यों और विजेट की घोषणा:

holder = new ViewHolder(); 
holder.text1 = (TextView) vi.findViewById(R.id.textView2single); 
holder.text2 = (TextView) vi.findViewById(R.id.textView3single); 
holder.text3 = (TextView) vi.findViewById(R.id.textView4single); 

onClick विधि के अंदर, मैं प्रयोग किया है:

View parentView = (View) v.getParent(); 

और फिर मेरी सभी विजेट घोषित फिर से इस parentview का उपयोग कर: माता-पिता पाने के लिए मेरी onClick मजबूर कर

text1 = (TextView) parentView.findViewById(R.id.textView2single); 
text2 = (TextView) parentView.findViewById(R.id.textView3single); 
text3 = (TextView) parentView.findViewById(R.id.textView4single); 

इस im करने में सूची दृश्य आइटम की स्थिति, इसलिए उस माता-पिता के अंदर सभी विजेट आसानी से कॉल किए जा सकते हैं, फिर आप जो भी पसंद कर सकते हैं वह कर सकते हैं। यह एकमात्र तरीका है जिसे मैंने पाया है।

0

एक कस्टम सूची दृश्य एडाप्टर OnClickListener

public class ListAdapter extends BaseAdapter implements OnClickListener {} 

ओवरराइड getView विधि

@Override 
public View getView(int 
     position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    View row = convertView; 
    ViewHolder holder = null; 

    if (row == null) { 
     LayoutInflater inflater = (LayoutInflater) mContext 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row = inflater.inflate(R.layout.list_item, parent, false); 
     holder = new ViewHolder(); 
     holder.b1= (Button) row.findViewById(R.id.b1); 
     b1.setOnClickListener(this); 
    else { 

     holder = (ViewHolder) row.getTag(); 

    } 
} 

अब onclick विधि

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch (v.getId()) { 
     case R.id.b1: 
      //button b1 click event 
      break; 
    } 
} 

public class ViewHolder { 
    Button b1; 
} 
0

एक बनाएं ओवरराइड बनाएँ, BaseAdapter का विस्तार करने और लागू नया दृश्य प्रकार परिवर्तनीय ए nd इसे currenView के साथ असाइन करें (जांचें कि आईआईटी शून्य है या नहीं)। परिभाषित चर (छविबटन यहां ले लिया गया है) और नीचे उल्लिखित तरीके से दृश्य आईडी सेट करें।

public View getView(int position, View convertView, ViewGroup parent) { 
     View itemview=convertView; 
     if (itemview==null) 
     { 
      itemview=getLayoutInflater().inflate(R.layout.group_list,parent,false); 

     } 
     final group_contacts currentcontact=g_contact.get(position); 
     ImageButton delete=(ImageButton) itemview.findViewById(R.id.imgbtn_delete); 
     delete.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //Add your code here to run on tapping button 
      } 
     }); 
     return itemview; 


    } 
0

एक ListView के Button पर onClickListener() विधि का उपयोग करने के लिए आपको Adapter के getView Methode में बटन पर onClickListener() लागू करना चाहिए।

लेकिन समस्या यह है कि, आप getView के position पैरामीटर से मान प्राप्त नहीं कर पाएंगे।

आपके द्वारा टच किए गए बटन के position प्राप्त करने के लिए, आपको अपने ListView पर getPositionForView() विधि पर कॉल करना होगा।

बेहतर समझ के लिए एक उदाहरण के साथ चक्र की सुविधा देता है,

  • पर विचार आप एक ListView नामित ExampleListview

  • एक Button पर यह ExampleButton नामित और यू उस पर onClickListener() उपयोग करना चाहते हैं।

    Examplebutton.setOnClickListener(new OnClickListener() { 
    
          @Override 
          public void onClick(View v) { 
         final int position= ExampleListview..getPositionForView(v); 
        /*Where 'v' is actually the 'View' object Which you are clicking.*/ 
    
    /*you can now right your code her & determine the your desired button by 
        using the position parameter */ 
    } 
    
संबंधित मुद्दे