Intereting Posts
मैक्सलाइनों और अंडाइज़ेज़ चेतन करें आईएमईआई, एंड्रॉइड_आईडी, डब्ल्यूएलएएन मैक और ब्लूटूथ एड्रेस को छोड़कर डिवाइस के लिए बिल्कुल सही अनूठा_आईडी डेक्स निष्पादित करने में असमर्थ: एकाधिक डीएक्स फाइलें Lbolts / AggregateException को परिभाषित करती हैं एक दृश्य के लिए पिकासो फसल locationManager.getLastKnownLocation () रिटर्न रिक्त 1 एमबी की हीप का उपयोग करके अजीब बिटमैप एक एंड्रॉइड ऐप में जावा कंपाइलर और डीईएक्स कनवर्टर को कैसे कार्यान्वित करें? obj टुकड़ा गलत 2 तर्क प्रकार पाया 'एंड्रॉइड। support.V4.app.Fragment।' अपेक्षित 'Android.app.Fragment' एक्सएमएल से लेआउट / व्यू ग्रुप में बाल दृश्य जोड़े जाने पर एंड्रॉइड एम्यूलेटर कीबोर्ड प्रदर्शित नहीं एंड्रॉइड स्टूडियो में निर्माण परियोजना में त्रुटि एंड्रॉइड शुरुआती: मोशनइवेंट एक्शन को समझना एंड्रॉइड पर getDir और getFilesDir के बीच क्या अंतर है? फोनगैप एचटीएमएल 5 / एंड्रॉइड ऐप – आइफ्रेम ऊंचाई मुद्दा सूची आइटम पर चेकबॉक्स स्टेटस बदलें क्लिक करें?

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

अपने आवेदन में मैंने 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() कॉल करें जहां आप अपने चेकबॉक्स के मूल्य निर्धारित कर रहे हैं