2015-02-02 3 views
0

У меня есть alertdialog с заголовком listview и listview с кнопкой «проверить все» и «снять галочку» и нижний колонтитул listview с кнопкой «Готово». Listview - CHOICE_MODE_MULTIPLE с значением arrayList EavesList. EavesList будет проверяться с помощью другого массиваList selectedItems, чтобы показать эти элементы, как отмечено. проблема, с которой я столкнулась, - это Listview показывает правильное значение, но показывает предыдущий элемент как отмеченный.Listview показывает предыдущий элемент, как установленный андроид

Вот мой код:

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 показывает правильное содержание, но проверяемый элемент ListView всегда один предыдущий элемент всегда проверяется, и элемент для проверки снят.

ответ

0

Почему бы не попробовать этот метод на вашей кнопки отправки нажмите

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()); 
    } 
} 

Теперь, как lstCheck приведет только проверенные значения сравнивают его с EavesList и найти те элементы, которые не существуют, и вы также вы не выбраны значения

0

Используйте следующее: (это псевдо-код):

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)) 
     } 

    } 
}); 

... теперь адаптер GetView():

if(checkBoxes.contains(data.get(position))){ 
checkBox.setChecked(true); 
}else{ 
checkBox.setChecked(false); 
} 
Смежные вопросы