2013-08-19 2 views
0

после снятия выбранного товара флажок автоматически проверить следующий товар. я пытаюсь переопределить GetCount метод, но не результатcheckbox auto checked item после удаления item

CountryAdapter.java

CountryAdapter extends ArrayAdapter<MyCountry>{ 
Context context; int layoutResourceId; ArrayList<MyCountry> countries; ContextualActionMode activity; 
public CountryAdapter(Context context, int layoutResourceId, 
     ArrayList<MyCountry> countries) { 
} 
@Override 
public int getCount() { 
    return countries.size(); 
} 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    final MyCountry country = countries.get(position); 
    ViewHolder viewHolder = null; 
    if(convertView == null) 
    { 
     viewHolder = new ViewHolder(); 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(layoutResourceId, null); 
     viewHolder.nameEn = (TextView) convertView.findViewById(R.id.tvNameEn); 
     viewHolder.nameVi = (TextView) convertView.findViewById(R.id.tvNameVi); 
     viewHolder.flag = (ImageView) convertView.findViewById(R.id.ivFlag); 
     viewHolder.check = (CheckBox) convertView.findViewById(R.id.checkBox1); 
     convertView.setTag(viewHolder); 
    } 
    else 
     viewHolder = (ViewHolder) convertView.getTag(); 
    viewHolder.nameEn.setText(countries.get(position).getNameEn()); 
    viewHolder.nameVi.setText(countries.get(position).getNameVi()); 
    viewHolder.flag.setImageDrawable(countries.get(position).getFlag()); 
    viewHolder.check.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      count = 0; 
      for (MyCountry country : countries) { 
       if(country.isCheck()) count++; 
      } 
      if(isChecked) 
      { 
       if(activity.actionMode == null || count == 0) 
       activity.actionMode = activity.startActionMode(activity.callback); 
       count++; 
       country.setCheck(true); 
      } 
      else 
      { 
       country.setCheck(false); 
       count--; 
       if(count == 0) activity.actionMode.finish(); 
      } 
     } 
    }); 
    return convertView; 
} 
int count = 0; 
public class ViewHolder{ 
    TextView nameEn; 
    TextView nameVi; 
    ImageView flag; 
    CheckBox check; 
} 

ContextualActionMode.java

public class ContextualActionMode extends Activity { 

ArrayList<MyCountry> countries = new ArrayList<MyCountry>(); 
ListView listView; 
CountryAdapter adapter; 
ActionMode.Callback callback = new ActionMode.Callback() { 
    @Override 
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 
     switch (item.getItemId()) { 
     case R.id.mnDelete: 
      for (int i = 0; i < countries.size(); i++) 
      { 
       if (countries.get(i).isCheck()) { 
        countries.remove(countries.get(i)); 
            countries.get(i).setChecked(false) 
          } 
      } 

      adapter.notifyDataSetChanged(); 
      mode.finish(); 
      return true; 
     default: 
      break; 
     } 
     return false; 
    } 
}; 

может быть ошибка здесь, я нашел некоторые решения , но ничего не работает я пытаюсь изменить цикл, так как индекс начало списка от 0

// я могу это исправить, спасибо много к Armaan Чужак

ссылка на мой источник, который имеет ту же самую проблему со мной MediaFire .com /? agnvic06c69cvw0

и редактировать в CountryAdapter.java

viewHolder.flag.setImageDrawable(countries.get(position).getFlag()); 
viewHolder.check.setChecked(false); --> right here, i forgot to add set check false as default. 
viewHolder.check.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
+0

извините, не смог получить вас. что вы хотите точно. пожалуйста, объясните немного больше. –

+0

Извините, я делаю заявку показать язык страны и флажок, после проверки, я удалю этот элемент с помощью кнопки delete , но после удаления товара установите флажок автообновить следующий элемент. пример: 3 пункт a b c, отмеченный в элементе b, после удаления элемента b, флажок автообновить элемент c –

+0

в чем проблема? подробнее расскажите о своей проблеме. –

ответ

1

Попробуйте следующее:

Просто добавьте эту строку перед событием onCheckChanged() следующим образом.

viewHolder.nameEn.setText(countries.get(position).getNameEn()); 
    viewHolder.nameVi.setText(countries.get(position).getNameVi()); 
    viewHolder.flag.setImageDrawable(countries.get(position).getFlag()); 
    viewHolder.check.setChecked(false); 
    viewHolder.check.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      // TODO Auto-generated method stub 
      count = 0; 
      for (MyCountry country : countries) { 
       if(country.isCheck()) 
        count++; 
      } 
      if(isChecked) 
      { 
       if(activity.actionMode == null || count == 0)//chua co 
       activity.actionMode = activity.startActionMode(activity.callback); 
       count++; 
       country.setCheck(true); 
      } 
      else 
      { 
       country.setCheck(false); 
       count--; 
       if(count == 0) 
        activity.actionMode.finish(); 
      } 
     } 
    }); 

Надеюсь, что это поможет!

+0

вы можете увидеть его в моем источнике @@ " i can not see the different –

+0

new line добавлен viewHolder.check.setChecked (false); –

+0

успех, большое спасибо: D –

-1

Try использовать android:checked="false" для CheckBox в файле XML, пожалуйста

+0

Я пытаюсь выполнить оба теста setchecked (false) и checked = "false", но не работает Я думаю, что notifydatasetchanged() не возвращает хороший результат –

0

Вы должны просто установить свой список перед уведомлениемDataSetChanged();

public void dellistview() { listviewdata.setChoiceMode (ListView.CHOICE_MODE_MULTIPLE);

SparseBooleanArray selected = listAdapterData.getCheckedItemPositions(); 

    if (selected != null) { 
     try { 

      for (int i = (selected.size() - 1); i >= 0; i--) 
      { 
       if (selected.valueAt(i)) { 

        String str[] = arrList.get(selected.keyAt(i)); 
        fmdbAccess.removelistitm(sourceTable, str[1]); 
        if (arrList != null) 
         arrList.remove(str); 

       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     selected.clear(); 
     arrList = fmdbAccess.getGenricTable(sourceTable, colName); 
     if (arrList != null && arrList.size() > 0) 
     setListAdapter(); 

     listAdapterData.notifyDataSetChanged(); 
     // finish(); 
    } 

}