Intereting Posts
व्यूफ़्लिपर या व्यूपेगेर के साथ हिंडोला बनाओ हाल के ऐप्स बटन को अवरोधित करें / अक्षम करें अस्पष्ट कोड मैं कैसे जांच सकता हूं कि छवि दृश्य खाली है या नहीं एंड्रॉइड फोन में स्थान एरिया कोड और सेल आईडी को कैसे जानें कस्टम Datepicker और Timepicker की खाल का उपयोग कैसे करें? Dalvik.system.PathClassLoader इंटेल उपकरणों पर jni नहीं मिल सकता है कोच्टलिन के साथ रीसाइक्लेअर वीव। विहिहोल्डर में देखने के लिए बाध्य कैसे करें टूलबार विकल्प मेनू पृष्ठभूमि रंग एंड्रॉइड: मैं AsyncTask के परप्रयक्षिक () को पैरामीटर कैसे पारित कर सकता हूँ? PHP लॉग इन त्रुटि अनिर्धारित सूचकांक एसडी-कार्ड पर डेटाबेस के साथ SQLiteOpenHelper का उपयोग कैसे करें? जब आवेदन नहीं चल रहा है तो क्या फ़ायरबेज क्लाउड मेसेजिंग नोटिफिकेशन को स्टैक करने के लिए? इन-ऐप बिलिंग, RESULT_DEVELOPER_ERROR को दूर नहीं कर सकती Android पर एक ShoutCast स्ट्रीम की जानकारी प्राप्त करना

ऑनसक्रोल चयनित चेकबॉक्स सूची से उपयोग किए बिना अनचेक हो रहा है

अपने आवेदन में मैंने ListView साथ checkbox जोड़ दिया है, और मैंने checkbox लिए सीमा भी प्रदान की है, उपयोगकर्ता 5 से अधिक checkbox चयन नहीं कर सकता है, लेकिन यह समस्या मेरे चयनित checkbox को स्क्रॉल करने पर है, मेरा स्निपेट कोड निम्नलिखित है, क्या कोई मुझे इस के साथ मदद कर सकता है

 public class CustomAdapter extends BaseAdapter { private LayoutInflater inflater = null; Context context; String rup = "\u20B9"; private ArrayList<ModelPooja> listData; boolean checked[]; public CustomAdapterPooja(Context mainActivity, ArrayList<ModelPooja> listData) { // TODO Auto-generated constructor stub context = mainActivity; this.listData = listData; inflater = (LayoutInflater) context. getSystemService(Context.LAYOUT_INFLATER_SERVICE); checked = new boolean[listData.size()]; for (int i = 0; i < checked.length; i++) { checked[i] = listData.get(i).isselected; } } @Override public int getCount() { // TODO Auto-generated method stub return listData.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return position; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub final ViewHolder holder; if (convertView == null) { holder = new ViewHolder(); convertView = inflater.inflate(R.layout.list_item_poojaselection, null); holder.tv = (TextView) convertView.findViewById(R.id.list_item_poojaname); holder.serviceprice = (TextView) convertView.findViewById(R.id.list_item_poojaprice); holder.dayss = (TextView) convertView.findViewById(R.id.list_item_poojadays); holder.txtseledates = (TextView) convertView.findViewById(R.id.selecteddatess); holder.checks = (CheckBox) convertView.findViewById(R.id.list_item_poojacheck); convertView.setTag(holder); }else { holder = (ViewHolder) convertView.getTag(); } holder.checks.setOnCheckedChangeListener(null); holder.checks.setFocusable(false); holder.checks.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton cb, boolean b) { if (checkMaxLimit()) { if (listData.get(position).isselected && b) { holder.checks.setChecked(false); listData.get(position).isselected = false; } else { holder.checks.setChecked(false); listData.get(position).isselected = false; Toast.makeText(context, "Max limit reached", Toast.LENGTH_SHORT).show(); } } else { if (b) { listData.get(position).isselected = true; } else { listData.get(position).isselected = false; } } } }); if (listData.get(position).isselected()) { holder.checks.setChecked(true); } else { holder.checks.setChecked(false); } holder.tv.setText(listData.get(position).getPOOJA_LISTING_NAME()); holder.dayss.setText(listData.get(position).getPOOJA_LISTING_DAYS()); holder.serviceprice.setText(rup + listData.get(position).getPOOJA_LISTING_AMOUNT()); return convertView; } public boolean checkMaxLimit() { int countermax = 0; for (int i = 0; i < checked.length; i++) { checked[i] = false; checked[i] = listData.get(i).isselected(); if (listData.get(i).isselected()) { countermax++; } } return countermax >= 5 ? true : false; } public class ViewHolder { TextView tv; TextView serviceprice; public CheckBox checks; public TextView dayss; public TextView txtseledates; } } 

Solutions Collecting From Web of "ऑनसक्रोल चयनित चेकबॉक्स सूची से उपयोग किए बिना अनचेक हो रहा है"

समस्या अपने getView () विधि में है आपने OnCheckedChangeListener सेट किया है और इसके बाद आप चेकबॉक्स को सही या गलत पर सेट करते हैं जो उस श्रोता में कॉलबैक को सक्रिय करता है। आपको सबसे पहले चेकबॉक्स चेक स्टेटस सेट करना चाहिए और उसके बाद ऑन चेक्ड चेंज लिस्टनर सेट करना चाहिए

इसके अलावा, उस बूलियन की जाँच [] फ़ील्ड बेकार है, इसलिए मैंने आपके कोड को थोड़ा सा सरल बनाया:

  public class CustomAdapter extends BaseAdapter { private final LayoutInflater inflater; private final Context context; private List<ModelPooja> listData; public CustomAdapter(Context mainActivity, List<ModelPooja> listData) { context = mainActivity; this.listData = listData; inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { return listData.size(); } @Override public Object getItem(int position) { return listData.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(final int position, View convertView, ViewGroup parent) { final ViewHolder holder; if (convertView == null) { holder = new ViewHolder(); convertView = inflater.inflate(R.layout.list_item_poojaselection, null); holder.tv = (TextView) convertView.findViewById(R.id.list_item_poojaname); holder.checks = (CheckBox) convertView.findViewById(R.id.list_item_poojacheck); convertView.setTag(holder); }else { holder = (ViewHolder) convertView.getTag(); } holder.checks.setOnCheckedChangeListener(null); holder.checks.setFocusable(false); if (listData.get(position).isselected) { holder.checks.setChecked(true); } else { holder.checks.setChecked(false); } holder.checks.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton cb, boolean b) { if (checkMaxLimit()) { if (listData.get(position).isselected && b) { holder.checks.setChecked(false); listData.get(position).isselected = false; } else { holder.checks.setChecked(false); listData.get(position).isselected = false; Toast.makeText(context, "Max limit reached", Toast.LENGTH_SHORT).show(); } } else { if (b) { listData.get(position).isselected = true; } else { listData.get(position).isselected = false; } } } }); holder.tv.setText(listData.get(position).getPOOJA_LISTING_NAME()); return convertView; } public boolean checkMaxLimit() { int countermax = 0; for(ModelPooja item : listData){ if(item.isselected){ countermax++; } } return countermax >= 5; } public class ViewHolder { TextView tv; public CheckBox checks; } } 

एडॉप्टर में गलत मान के साथ एक बूलियन सरणी बनाओ। अगर उपयोगकर्ता सरणी की जांच करता है तो सरणी की स्थिति सही है। अनचेक पर इसे गलत बनाते हैं हमेशा उस बुलियन सरणी से चेकबॉक्स मान सेट करें

इसका कारण यह है कि जब आप अपने listview को फोन के ऊपरी या निचले तरफ से स्क्रॉल करते हैं, तो सूची दृश्य के सभी आइटम पुनर्जन्मा होते हैं और वे डिफ़ॉल्ट मान पर सेट होते हैं इस से बचने के लिए एक मॉडल वर्ग बनाओ जो वर्तमान चेकबॉक्स (सच्ची या गलत) को रखता है और उस मॉडेल उदाहरण से प्राप्तकर्ता विधि को कॉल करके एडेप्टर में चेकबॉक्स का मान सेट करता है। उदाहरण के लिए:

model.java

 public class AddressModel { private boolean isChecked; private String address; private int alAddressDelete; public AddressModel(){ } public AddressModel(boolean isChecked, String address, int alAddressDelete) { this.isChecked = isChecked; this.address = address; this.alAddressDelete = alAddressDelete; } public boolean getIsChecked() { return isChecked; } public void setIsChecked(boolean isChecked) { this.isChecked = isChecked; } } 

अपने एडॉप्टर वर्ग में setIsChecked(boolean isChecked) में setIsChecked(boolean isChecked) कॉल करके चेकबॉक्स का मान सेट करें। call getIsChecked() कॉल करें जहां आप अपने चेकबॉक्स के मूल्य निर्धारित कर रहे हैं