2012-06-22 12 views
13

में क्लिक किए गए बटन से सूचीदृश्य आइटम प्राप्त करें मेरे पास दो बटन के साथ एक कस्टम सूची दृश्य है और जब मैं किसी भी पंक्ति पर बटन क्लिक करता हूं तो मैं सूचीदृश्य पर टेक्स्ट लेबल प्राप्त करना चाहता हूं और अभी बस एक टोस्ट पॉपअप करना चाहता हूं इसके साथ। अब तक कुछ भी काम नहीं किया है, मैं अपने सरणी में आखिरी वस्तु प्राप्त करता रहता हूं।एंड्रॉइड: कस्टम सूचीदृश्य

यहाँ एक स्क्रीन शॉट आप मैं क्या मतलब

enter image description here

यहाँ का एक बेहतर विचार देने के लिए अपने कस्टम ListView के लिए मेरे एडाप्टर उपवर्ग है

static final String[] Names = 
      new String[] { "John", "Mike", "Maria", "Miguel"}; 


class MyArrayAdapter extends ArrayAdapter<String> { 
    private final Context context;  

    int which; 

    public MyArrayAdapter(Context context, String[] pValues) { 
     super(context, R.layout.main, pValues); 
     this.context = context; 
     values = pValues; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     rowView = inflater.inflate(R.layout.main, parent, false); 
     TextView textView = (TextView) rowView.findViewById(R.id.label); 
     ImageView imageView = (ImageView) rowView.findViewById(R.id.logo); 
     Button call = (Button) rowView.findViewById(R.id.button1); 
     Button chat = (Button) rowView.findViewById(R.id.button2); 
     textView.setText(values[position]); 


     // Change icon based on name 
     s = values[position];   
     which = position; 
     call.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       String name = values[which]; 
       Toast.makeText(CustomListView.this, name, Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     return rowView; 
    } 
} 

संपादित करें:

String name = textView.getText().toString(); 
RelativeLayout ll = (RelativeLayout)v.getParent(); 
textView = (TextView)ll.findViewById(R.id.label); 
Toast.makeText(CustomListView.this, name, 
Toast.LENGTH_SHORT).show(); 
+0

'valueView.getText()।' Value] के स्थान पर 'textView.getText()। ToString() 'आज़माएं। –

उत्तर

14

आसान करने के लिए:

call.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      RelativeLayout rl = (RelativeLayout)v.getParent(); 
      TextView tv = (TextView)rl.findViewById(R.id.label); 
      String text = tv.getText().toString(); 
      Toast.makeText(CustomListView.this, text, Toast.LENGTH_SHORT).show(); 
     } 
    }); 
+0

मैंने अपने एक्सएमएल में एक रिलेटिव लेआउट का इस्तेमाल किया। मैंने यह किया है और कुछ सुधार हैं लेकिन पहली बार जब मैं प्रत्येक बटन पर क्लिक करता हूं तो मुझे पिछले टेक्स्ट व्यू का मान मिलता है जिसके बाद मुझे सही मान मिलते हैं। मुझे लॉगकैट में भी एक चेतावनी मिलती है: 06-22 14: 28: 29.279: डब्ल्यू/संसाधन (14841): स्ट्रिंग में कनवर्ट करना: टाइपेड वैल्यू {टी = 0x12/डी = 0x0 ए = 3 आर = 0x7f050002} – Amanni

+0

वह नहीं होना चाहिए ' ऐसा नहीं होता है क्योंकि उपरोक्त कोड पैरेंट (पंक्ति) को खोजने के लिए क्लिक किए गए बटन का उपयोग करता है और फिर उस भाई पाठदृश्य को खोजने के लिए इसका उपयोग करता है ... क्या आप कोड को दिखाने के लिए अपनी पोस्ट संपादित कर सकते हैं? – Barak

+0

मैंने अभी अपनी पोस्ट संपादित की है। मैं भी आश्चर्यचकित हूं क्योंकि मुझे विश्वास है कि इसे काम करना चाहिए। – Amanni

5

व्यू के सेटटैग विशेषता का उपयोग करें ..............

रूप

Button call = (Button) rowView.findViewById(R.id.button1); 
call.setTag(position); 

और

call.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       int which = -1; 
       Obejct obj = v.getTag(); 
       if(obj instaceof Integer){ 
       which = ((Integer)obj).intValue(); 
        } 

       if(which >-1){ 
       String name = values[which]; 
       Toast.makeText(CustomListView.this, name, Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 
+0

वाह, यह काम किया। क्या आप संक्षेप में बता सकते हैं कि आप वास्तव में क्या कर रहे हैं – Amanni

+0

मूल रूप से प्रत्येक दृश्य सेटटाग का उपयोग करके किसी भी ऑब्जेक्ट को रखने में सक्षम है, मैंने उस पंक्ति पर प्रत्येक बटन के साथ टैग में स्थिति सेट की है और जब आप ऑनक्लिक (जो एक ही बटन है) में देखें, तो मैं बस उस विशेष बटन से टैग वापस प्राप्त करें ......... –

+1

आपको बहुत धन्यवाद – Amanni

3

आप एक ListActivity है, और आप अपने खुद के एडाप्टर उपयोग नहीं कर रहे हैं, तो आप अभी भी कर सकते हैं टैप किए गए बटन से संबंधित सूची आइटम प्राप्त करें, जैसे:

सूची पंक्ति के अपने लेआउट फ़ाइल में:

<ImageButton 
     android:id="@+id/button_call" 
     android:layout_height="48dip" 
     android:layout_width="48dip" 
     android:contentDescription="Call" 
     android:onClick="callBuddy" 
     android:src="@drawable/call_button_image" 
     /> 

अपने ListActivity में:

public void callBuddy(View view) { 

    int position = getListView().getPositionForView((View) view.getParent()); 
    Buddy buddyToCall = (Buddy) getListView().getItemAtPosition(position); 

    Toast.makeText(MyListActivity.this, String.format("Calling your buddy %s.", buddyToCall.name), Toast.LENGTH_SHORT).show(); 

} 
0

सेट onClick = बटन/छवि/आदि की एक्सएमएल के लिए "क्लिक" ...

और आपके गतिविधि में, कार्य करें:

public void click(View v) { 
    final int position = getListView().getPositionForView(v); 
    String text = getListView().getItemAtPosition(position).toString(); 
    Toast.makeText(getApplicationContext, text, Toast.LENGTH_SHORT).show(); 
} 
+0

को लागू करने के लिए बहुत आसान है वाह यह इतना आसान लगता है। आपको किसी और चीज को परिभाषित नहीं करना होगा? 'GetListView() 'या' position' –

+0

क्या है अंतिम int स्थिति = getListView()। getPositionForView (v); –

0

बस GetItem (का उपयोग करें) और स्थिति पारित पूर्व: getItem(position).getID() यहां getID() विधि गेटटर विधि

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