2011-11-14 18 views
5

एप्लिकेशन में मैं एक Listactivity जो TextView और बटन (हटाना लेबल) के साथ एक एडाप्टर है की है। अब मैं संबंधित बटन क्लिक आइटम को हटाना चाहता हूं। कृपया कोड की जांच करें और सुझाव दें ???? `ListView के अंदर बटन पर ऑनक्लिक लिस्टनर() कैसे सेट करें?

public class MySimpleArrayAdapter extends ArrayAdapter<String> implements OnClickListener { 
    private final Activity context; 
    private final String[] names; 
    private Button deleteButton= null; 
    public MySimpleArrayAdapter(Activity context, String[] names) { 
     super (context, R.layout.imagelistlayout, names); 
     this.context = context; 
     this.names = names; 

    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     View rowView = inflater.inflate(R.layout.imagelistlayout, null, true); 
     deleteButton= (Button)rowView.findViewById(R.id.delete_bn); 
     deleteButton.setTag(position); 
     TextView textView = (TextView) rowView.findViewById(R.id.label); 
     textView.setText(names[position]); 
     deleteButton.setOnClickListener(this); 
     return rowView; 

    } 

    @Override 
    public void onClick(View convertView) { 
     System.out.println(deleteButton.getTag()); 

    } 

}` 

मुझे पता है कि कैसे मैं आइटम जिसकी बटन क्लिक किया गया है हटा सकते हैं चाहता हूँ।

+0

http://stackoverflow.com/questions/1821871/android-how-to-fire-onlistitemclick-in-l istactivity-साथ-बटन-इन-सूची –

+0

http://www.geekmind.net/2009/11/android-custom-list-item-with-nested.html –

उत्तर

8

सिर्फ getview अंदर क्लिक श्रोता पर संभाल जहां findviewbyid

इस संभाल लेंगे का उपयोग कर बटन पा वर्तमान पंक्ति बटन पर क्लिक करें

public class MySimpleArrayAdapter extends ArrayAdapter<String> implements OnClickListener { 
    private final Activity context; 
    private final String[] names; 
    private Button deleteButton= null; 
    public MySimpleArrayAdapter(Activity context, String[] names) { 
     super (context, R.layout.imagelistlayout, names); 
     this.context = context; 
     this.names = names; 

    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     View rowView = inflater.inflate(R.layout.imagelistlayout, null, true); 
     deleteButton= (Button)rowView.findViewById(R.id.delete_bn); 
     deleteButton.setTag(position); 
     TextView textView = (TextView) rowView.findViewById(R.id.label); 
     textView.setText(names[position]); 
     deleteButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       //try to hide textview or something it may help 
      } 
     }); 
     return rowView; 

    } 

}` 
0
deleteButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      Log.d("TAG", "position: " + position); 
     } 
    }); 

और स्थिति आप में अंतिम करने के लिए बनाने की जरूरत है getView (अंतिम int स्थिति, ..., ...) जब आपके पास स्थिति है, तो जो कुछ भी आप चाहते हैं उसे करें! हटाएँ .. संशोधित या जो कुछ भी,

+0

println (deleteButton.getTag()) ; इस लाइन से मेरा स्थिति का अंतिम मान मान लीजिए मैं अपनी सूची में तीन आइटम स्थिति का मूल्य 2. – Sandroid

+0

ख होगा टैग का प्रयोग न करें राशि प्राप्त हो, तो आप चाहते हैं सूचीदृश्य, जहां आप बटन सही क्लिक किया है, में स्थिति है? फिर आपके पास getView में स्थिति है। आप उस विशिष्ट पंक्ति हटाना चाहते हैं, तो बस सूची अपने उस स्थिति में अनुकूलक में भेजने से इसे हटा .. तो yourAdapter.notifyDataSetChanged का उपयोग(); – Carnal

0

बहुत ही सरल आप getView में स्थिति पूर्णांक चर जो आइटम जिस पर बटन इतना बढ़ स्थिति चर का उपयोग आइटम जिस पर आप क्लिक किया नष्ट करने के लिए किया गया है को संदर्भित करता है। बस नीचे कोड का प्रयोग करें।

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     View rowView = inflater.inflate(R.layout.imagelistlayout, null, true); 
     deleteButton= (Button)rowView.findViewById(R.id.delete_bn); 
     deleteButton.setTag(position); 
     TextView textView = (TextView) rowView.findViewById(R.id.label); 
     textView.setText(names[position]); 
     // deleteButton.setOnClickListener(this); 
deleteButton.setOnClickListener(new OnClickListener() 
     { 

      @Override 
      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 
       //use position here 
          // delete the item from data string havng position index and the use notifydataset 
      } 

     }); 
     return rowView; 

    } 
9

आप getView विधि में अपने onClick हैंडलर कठिन कोड के लिए नहीं की कोशिश लेकिन कैसे आप सूचीदृश्य करने के लिए एक onClick विधि आवंटित पर गौर करना चाहिए। यहां आप गतिविधि से विधि असाइन करते हैं और यही आपको यहां भी करना चाहिए।

में आप एडाप्टर से आप गतिविधि आप तो onClick विधि इस

की तरह प्रदान कर सकते हैं एक विधि setOnXXXClickListener

public void setOnXXXClickListener(final OnClickListener onClickListener) { 
    this.onXXXClickListener = onClickListener; 
} 

और अपने getView में कहा जाता है तो

viewHolder.xxx.setOnClickListener(this.onXXXClickListener); 

की तरह बटन को यह आवंटित बनाने

this.adapter.setOnXXXClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Log.d(TAG, "OnXXXClickListener"); 
    } 
}); 
+0

उत्कृष्ट उत्तर अगर आपको कुछ फ़ंक्शन कॉल करने की आवश्यकता है जो सूचीदृश्य एडाप्टर से संबंधित नहीं है! – Leonardo

+0

इस दृष्टिकोण से स्थिति कैसे प्राप्त करें? – Sumit

+0

यदि आपको उस स्थिति की आवश्यकता है तो आप setOnItemClickListener का उपयोग कर रहे हैं। हालांकि आपके पास हमेशा सेटऑन एक्सप्लोर लिस्टर असाइन करने वाले दृश्य पर उपयोगकर्ता सेटटैग का विकल्प होता है और उसके बाद टैग मान निकाला जाता है जो तब स्थिति हो सकता है। – slott

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