2013-08-19 28 views
0

刪除項目選定複選框後自動檢查下一項。 我嘗試重寫getCount將的方法,但沒有任何結果複選框刪除項目後自動檢查項目

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

對不起,我做了一個國家的應用程序顯示語言和一個複選框, 後檢查項目,我將通過按鈕刪除該項目刪除 但刪除項目後,複選框自動檢查下一個項目。 示例: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

你可以在我的來源看到它@@「 我看不到不同的 –

+0

新行增加了viewHolder.check.setChecked(false); –

+0

成功,非常感謝:D –

-1

嘗試在XML文件中使用android:checked="false"CheckBox

+0

我嘗試解決方案setchecked(false)和檢查=「false」但不工作 我認爲notifydatasetchanged()不會返回一個好結果 –

0

你必須在notifyDataSetChanged()之前設置你的列表視圖。

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

}