आप दूसरा पैरामीटर पर findViewById
बुला (जो क्लिक किया आइटम के View
है) onItemClick
हैंडलर के भीतर से आइटम की img
दृश्य का पता लगाने कर सकते हैं:
public void onItemClick(AdapterView parentView, View clickedItemView, int pos, long id)
{
ImageView imageView = (ImageView) clickedItemView.findViewById(R.id.img);
// ...
}
संपादित करें: ध्यान रखें कि एंड्रॉयड सूची पुनः उपयोग कर लेता आइटम View
ऑब्जेक्ट्स (जिसे व्यू रीसाइक्लिंग भी कहा जाता है), इसलिए प्रत्येक आइटम की टॉगल स्थिति को बाद में उपयोग के लिए संग्रहीत करने की आवश्यकता है। जब भी कोई सूची आइटम दृश्य डिस्प्ले के लिए सूची आइटम से जुड़ा होता है, तो प्रत्येक आइटम की टॉगल स्थिति को एक्सेस करने की आवश्यकता होती है।
import java.util.Arrays;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
public class SO4539968TestCaseActivity extends Activity {
private static final List<String> ITEM_TEXTS = Arrays.asList(new String[] {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13"});
private boolean[] itemToggled;
private class MyArrayAdapter<T> extends ArrayAdapter<T>
{
public MyArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects) {
super(context, resource, textViewResourceId, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View itemView = super.getView(position, convertView, parent);
ImageView imageView = (ImageView) itemView.findViewById(R.id.img);
imageView.setImageResource(itemToggled[position] ? R.drawable.on : R.drawable.off);
return itemView;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
itemToggled = new boolean[ITEM_TEXTS.size()];
Arrays.fill(itemToggled, false);
ListView listView = (ListView) findViewById(R.id.list_view0);
listView.setAdapter(new MyArrayAdapter<String>(this, R.layout.list_item, R.id.txt, ITEM_TEXTS));
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> listView, View itemView, int position, long id) {
itemToggled[position] = ! itemToggled[position];
ImageView imageView = (ImageView) itemView.findViewById(R.id.img);
imageView.setImageResource(itemToggled[position] ? R.drawable.on : R.drawable.off);
}
});
}
}
अध्ययन करने के लिए महत्वपूर्ण भागों onItemClick
कॉलबैक और MyArrayAdapter
में getView
की ओवरराइड हैं:
उदाहरण के लिए, यहाँ एक गतिविधि है कि क्लिक पर प्रत्येक आइटम की छवि को टॉगल करता है के उदाहरण काम कर रहा है।
getView
Adapter
वर्ग की विधि आइटम लेआउट को बढ़ाने के लिए ज़िम्मेदार है। इस उदाहरण में, मैं सुपर क्लास शुरू में आइटम दृश्य तैयार करने के लिए की getView
विधि कॉल, लेकिन फिर मैं उचित रूप से आइटम की img
देखने के संसाधन आईडी तैयार करना न भूलें:
imageView.setImageResource(itemToggled[position] ? R.drawable.on : R.drawable.off);
भी देखें: Developing Applications for Android – Gotchas and Quirks
आपको बहुत बहुत धन्यवाद। यह मेरे लिए काम किया। मैं इस समाधान को एक महीने के बारे में बहुत लंबे समय तक खोज रहा था। आपने मुझे बचाया: डी – Vivek
अब, मैं छविदृश्य के स्रोत को बदलने में सक्षम हूं, लेकिन जब मैं नीचे स्क्रॉल करता हूं और फिर वापस आ जाता हूं, तो छविदृश्य वापस अपने पिछले स्रोत पर रीसेट कर दिया जाता है। ये क्यों हो रहा है? क्या आप मेरी मदद कर सकते हैं? – Vivek
@ विवेक: यह एक दृश्य पुन: उपयोग की समस्या की तरह लगता है। कृपया मेरा अद्यतन उत्तर देखें क्योंकि मैंने एक कामकाजी उदाहरण जोड़ा है और एक उत्कृष्ट ब्लॉग पोस्ट से लिंक किया है जो एंड्रॉइड के विचारों के रीसाइक्लिंग का वर्णन करता है। –