Anitha
Anitha

Reputation: 253

Listview shows previous item as checked android

I have alertdialog with listview and listview header with "check all" and "uncheck all" button and listview footer with "Done" button. Listview is CHOICE_MODE_MULTIPLE with arrayList value EavesList. EavesList will be cross checked with another arrayList selectedItems to show those items as checked. the issue i am facing is Listview shows correct value but shows previous item as checked.

Here's my code:

AlertDialog.Builder builder = new AlertDialog.Builder(
                        getActivity());
                builder.setTitle("Select Category List");

                final ListView modeList = new ListView(getActivity());
                LayoutInflater inflater = LayoutInflater.from(getActivity());

                View rootView = inflater.inflate(
                        R.layout.listview_header_eavesdrop, null);
                modeList.addHeaderView(rootView);

                Button btnDone = new Button(getActivity());
                btnDone.setText("Done");
                btnDone.setTextColor(getActivity().getResources().getColor(
                        android.R.color.white));
                final ArrayAdapter<String> modeAdapter = new ArrayAdapter<String>(
                        getActivity(),
                        android.R.layout.simple_list_item_multiple_choice,
                        android.R.id.text1, EavesList);
                modeList.addFooterView(btnDone);
                modeList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
                modeList.setAdapter(modeAdapter);   
                    if (selectedItems.size() != 0) {
                    for (int i = 0; i < EavesList.size(); i++) {

                        if (selectedItems.size() != 0) {
                            // modeList.setItemChecked(2, true);

                            for (int j = 0; j < selectedItems.size(); j++) {
                                if (EavesList.get(i).contains(
                                        selectedItems.get(j))) {
                                    modeList.setItemChecked(i, true);
                                    Log.e("Selected Item ",
                                            "there Values true "
                                                    + selectedItems.get(j));
                                    j = selectedItems.size() + 2;
                                } 
                            }
                        } else {
                            Log.e("Selected Item ", "No Values");
                        }
                    }
                } else {
                    for (int i = 0; i < EavesList.size(); i++) {

                        if (category.size() != 0) {
                                for (int j = 0; j < category.size(); j++) {
                                if (EavesList_id.get(i).contains(category.get(j))) {
                                    modeList.setItemChecked(i, true);
                                    Log.e("List " + EavesList_id.get(i), ""+ category.get(j));                                  
                                    Log.e("Selected category Item ",
                                            "there Values true "
                                                    + category.get(j));
                                } else {
                                    if (j == category.size()) {
                                        modeList.setItemChecked(i, false);
                                        Log.e("Selected category Item ",
                                                "there Values  false "
                                                        + category.get(j));
                                    }
                                }
                            }
                        } else {
                            Log.e("Selected Item ", "No Values");
                        }
                    }
                }
                builder.setView(modeList);

                final Dialog dialog = builder.create();

                btnDone.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        selectedItems.clear();
                        eavesdropping.setText("");
                        SparseBooleanArray checked = modeList
                                .getCheckedItemPositions();
                        selected_community_id = new String[checked.size()];
                        String[] evas_id;
                        for (int i = 0; i < checked.size(); i++) {
                            // Item position in adapter
                            int position = checked.keyAt(i);
                            // Add sport if it is checked i.e.) == TRUE!
                            if (checked.valueAt(i))
                                selectedItems.add(EavesList.get(position));
                                selected_community_id[i] = EavesList_id
                                    .get(position);
                            }     

                        for (int i = 0; i < selected_community_id.length; i++) {
                            eavesdropping_hide.append(selected_community_id[i]);
                            if (i != selected_community_id.length ) {
                                eavesdropping_hide.append(",");
                            }
                        }

                        String[] outputStrArr = new String[selectedItems.size()];

                        for (int i = 0; i < selectedItems.size(); i++) {
                            outputStrArr[i] = selectedItems.get(i);

                            eavesdropping.append(outputStrArr[i]);
                            eavesdropping.append(" | ");
                        }
                        dialog.dismiss();
                    }
                });
                dialog.show();

P.S: Listview shows proper content but the checked item of listview is always one previous item is always checked and the item to be checked is unchecked.

Upvotes: 0

Views: 391

Answers (2)

Vladislav Kan
Vladislav Kan

Reputation: 354

Use the following: (it is pseudo code):

ArrayList<String> data;
ArrayList<String> checkboxes;

.....

    listview.setOnItemClickListener(new OnItemClickListener()
{
    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3)
    { 
       if(chockBoxes.containds(data.get(position))){
       chockBoxes.remove(data.get(position));
       }else{
       chockBoxes.add(data.get(position))
       }

    }
});

... now in your adapter getView():

if(checkBoxes.contains(data.get(position))){
checkBox.setChecked(true);
}else{
checkBox.setChecked(false);
}

Upvotes: 0

MDMalik
MDMalik

Reputation: 4001

Why don't try this method on your submit button click

SparseBooleanArray sparseBooleanArray = list.getCheckedItemPositions();

List<String> lstCheck= new ArrayList<String>();

for (int i = 0; i < list.getCount(); i++) {
if (sparseBooleanArray.get(i) == true) {
      lstCheck.add(list.getItemAtPosition(i).toString());
   }
 }

Now as lstCheck will result in only the checked values compare it with your EavesList and find those items that do not exist and you will also have you non-selected values

Upvotes: 0

Related Questions