मैं एक बटन दबाए जाने के बाद अलग-अलग सामग्री के साथ अपनी सूचीदृश्य में एक पंक्ति को अपडेट करना चाहता हूं। मुझे पता है कि मैं notifydatasetchanged(
का उपयोग कर सकता हूं) लेकिन यह पूरे listView
को अपडेट करेगा।ListView एक पंक्ति को अपडेट करना
मैंने यह answer पढ़ा है और यह मैं जो करना चाहता हूं उसके लिए पूरी तरह से फिट बैठता है।
मैंने 5 पंक्तियों के साथ एक सूचीदृश्य किया है और जब मैं बटन दबाता हूं तो मैं 4 वें पंक्ति को एक अलग पाठ के साथ अपडेट करना चाहता हूं। मैं प्रोग्राम को प्रोग्रामिक रूप से सेट नहीं करना चाहता क्योंकि यह सिर्फ एक डमी प्रोजेक्ट है, यह देखने के लिए कि क्या एक पंक्ति को रीफ्रेश करना संभव है और मेरी वास्तविक परियोजना सिर्फ textview
से कहीं अधिक जटिल है।
तो मेरा सवाल है: क्या मैं getView()
का उपयोग listview
में एक पंक्ति को अपडेट करने के लिए कर सकता हूं?
यहाँ मेरी कोड है:
मेरी गतिविधि:
public class MainActivity extends Activity {
public ListView list1;
public listAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list1 = (ListView) findViewById(R.id.my_list);
adapter = new listAdapter(this);
list1.setAdapter(adapter);
Button button1 = (Button) findViewById(R.id.my_button);
button1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
adapter.setText("Different text");
View row2Update = list1.getChildAt(3);
list1.getAdapter().getView(3, row2Update, list1);
}
});
}
}
मेरी अनुकूलक:
012:
public class listAdapter extends BaseAdapter{
public Activity activity;
public String text="Normal Text";
public listAdapter(Activity activity){
this.activity = activity;
}
public void setText(String text){
this.text = text;
}
public int getCount() {
return 5;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = activity.getLayoutInflater();
LinearLayout rowView = (LinearLayout) inflater.inflate(R.layout.row_layout, null);
TextView textView = (TextView) rowView.findViewById(R.id.row_text);
textView.setText(text);
return rowView;
}
}
इस गतिविधि को कैसा दिखता है
लेकिन जब मैं प्रेस मेरी बटन कोई अन्य परिवर्तन नहीं
ग्रेट उत्तर। मैं आपसे सहमत हुँ। एक और चीज जो वह कर सकती थी वह सिर्फ इटैमक्लिक लिस्टनर पर लिस्ट व्यू पर सेट है, और यदि स्थिति कुछ भी है (मान लीजिए कि आप एक बटन का उपयोग नहीं करते हैं), तो आप एडाप्टर में सूची को अपडेट करें। बेशक आखिरकार उन्हें यह पता लगाने की जरूरत है कि उनके लिए कौन सा विकल्प सबसे अच्छा है। – Andy
@ एंडी: आप सही हैं। असल में यह बेहतर विचार होगा। लेकिन चूंकि, उन्होंने विशेष रूप से बटन के क्लिक पर पंक्ति सामग्री को बदलने के लिए कहा, मैं इसके लिए गया। – Ashwin
:) ओह नहीं, आप तकनीकी रूप से सही @Ashwin हैं क्योंकि यह अधिक कुशल है। कोई अनावश्यक काम नहीं किया जा रहा है। चूंकि वह केवल एक लाइन को अपडेट करना चाहता है। लेकिन वह उल्लेख करता है कि यह केवल एक परीक्षण है, इसलिए मुझे लगता है कि उसे एक और विधि भी शामिल करनी चाहिए जिसमें वह और अधिक अपडेट होना चाहता है। – Andy