यह प्रश्न इसी तरह के शीर्षक के अन्य लोगों से थोड़ा अलग है। मैं सूची में डेटा को अपडेट करने की कोशिश नहीं कर रहा हूं, मैं सूची के को अपडेट करने का प्रयास कर रहा हूं।सूचीदृश्य के पुनर्विक्रय को कैसे बल दें?
मेरा ऐप समर्थन पुस्तकालय का उपयोग कर आधारित टुकड़ा है। मेरे पास वरीयता सक्रियता है जहां मैं उपयोगकर्ता को उन रंगों को सेट करने की अनुमति देता हूं जिन्हें वे सूची में टेक्स्ट के लिए पसंद करते हैं (एडाप्टर वरीयता पढ़ता है और रंग सेट करता है)। यह अधिकांश भाग के लिए अपेक्षित के रूप में काम कर रहा है।
मेरे पास जो समस्या है, वह इस प्रकार है। जब मेरे पास स्क्रीन पर सूची है (यह एक सूचीफ्रेगमेंट है) और मेनू खींचें, प्राथमिकताएं चुनें और रंग वरीयता में बदलाव करें। वरीयता सक्रियता से सूची में वापस आने पर, मुझे सूची को नए रंग के साथ खुद को फिर से निकालने के लिए प्रतीत नहीं होता है।
यदि मैं सूची से दूर नेविगेट करता हूं और उस पर वापस आ जाता हूं, तो यह नए रंग के साथ पुन: उत्पन्न होता है।
मैं परिवर्तन करने के लिए onResume
का उपयोग करने का प्रयास कर रहा हूं। कोड मैं वर्तमान में है (उस सूची के लिए कुछ भी करने के लिए प्रकट नहीं है, लेकिन एकदम सही ढंग से हैडर रंग बदल जाता है):
@Override
public void onResume() {
super.onResume();
header.setTextColor(MyApplication.header);
line.setBackgroundColor(MyApplication.header_line);
subheader.setTextColor(MyApplication.header);
getListView().invalidateViews();
}
मैं invalidateViews
और invalidate
कोशिश की है। निराशा में मैंने एडाप्टर पर notifyDataSetChanged
पर कॉल करने का प्रयास किया, भले ही डेटा में कोई बदलाव न हो। कुछ भी काम नहीं करता है।
क्या मुझे कुछ स्पष्ट याद आ रहा है, या ऐसा करने का कोई तरीका नहीं है?
संपादित
मेरी एडाप्टर से 'getView` विधि:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null)
convertView = View.inflate(context, layout, null);
View row = convertView;
c.moveToPosition(position);
TextView first = (TextView) convertView.findViewById(R.id.ListItem1);
TextView second = (TextView) convertView.findViewById(R.id.ListItem2);
TextView third = (TextView) convertView.findViewById(R.id.ListItem3);
TextView fourth = (TextView) convertView.findViewById(R.id.ListItem4);
DecimalFormat df = new DecimalFormat("0.00");
Double hold = Double.valueOf(c.getString(3));
Double qty = Double.valueOf(c.getString(1));
Double total = hold * qty;
String color = "#FF00FF";
first.setText(c.getString(2));
first.setTextColor(MyApplication.shoplistitem_name);
second.setText(c.getString(4));
second.setTextColor(MyApplication.shoplistitem_desc);
third.setText(c.getString(1));
third.setTextColor(MyApplication.shoplistitem_qty);
fourth.setText("$" + df.format(total));
fourth.setTextColor(MyApplication.shoplistitem_desc);
if (strikethroughState[position] == 1) {
first.setPaintFlags(first.getPaintFlags()
| Paint.STRIKE_THRU_TEXT_FLAG);
second.setPaintFlags(second.getPaintFlags()
| Paint.STRIKE_THRU_TEXT_FLAG);
third.setPaintFlags(third.getPaintFlags()
| Paint.STRIKE_THRU_TEXT_FLAG);
fourth.setPaintFlags(third.getPaintFlags()
| Paint.STRIKE_THRU_TEXT_FLAG);
row.setBackgroundColor(MyApplication.shoplistitem_checked);
} else {
first.setPaintFlags(first.getPaintFlags()
& ~Paint.STRIKE_THRU_TEXT_FLAG);
second.setPaintFlags(second.getPaintFlags()
& ~Paint.STRIKE_THRU_TEXT_FLAG);
third.setPaintFlags(third.getPaintFlags()
& ~Paint.STRIKE_THRU_TEXT_FLAG);
fourth.setPaintFlags(third.getPaintFlags()
& ~Paint.STRIKE_THRU_TEXT_FLAG);
row.setBackgroundResource(R.color.black);
}
return (row);
}
अच्छा ... इसने मेरी समस्या को हल करने का तरीका बताया ... और मुझे अविश्वसनीय रूप से बेवकूफ़ लगता है। मैं 'MyAplication.setPreferences' को कॉल कर रहा था। विधि 'MyAplication.setPrefs' है। * आह * – Barak