嗨,我想實現一個長列表,其中用戶可以檢查列表中的項目view.when滾動列表項,然後我將檢查的項目存儲在sparseboolean數組,但是當我嘗試通過點擊一個按鈕來檢查哪些項目被選中。它顯示奇怪的行爲。當我檢查第一個項目,然後單擊按鈕然後它給了正確的結果,但是當我開始檢查從列表底部的項目。那麼它顯示出奇怪的行爲。從0-13索引有14個項目。當我檢查第13個元素時,它沒有顯示吐司。當我點擊第12個元素時,它顯示沒有吐司。當我點擊第12個元素時,它顯示沒有吐司第一次吐司出現時我點擊第8元素。請幫助我找出我錯在哪裏,並幫助我修復bug。當我點擊第7元素三敬酒來到7,8,9當我點擊第6元素5toast出現6,7, 8,9,10。請幫助我解決這個bug。我想顯示選中的烤麪包中的數字。 這裏是我的代碼檢查列表視圖中檢查的項目
/**
* This example shows how to create a list of checkboxes.
*/
public class CheckboxActivity extends ListActivity implements
AdapterView.OnItemClickListener {
static SparseBooleanArray mCheckStates;
private CheckBoxAdapter mCheckBoxAdapter;
List<Boolean> check;
Button btn;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mCheckBoxAdapter = new CheckBoxAdapter(this,
R.layout.list_item_checkbox, GENRES);
setListAdapter(mCheckBoxAdapter);
check=new ArrayList<Boolean>();
final ListView listView = getListView();
listView.setItemsCanFocus(false);
listView.setTextFilterEnabled(true);
listView.setOnItemClickListener(this);
btn=(Button)findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
for(int i=0;i<mCheckStates.size()+1;i++)
if(mCheckStates.get(i)==true)
Toast.makeText(CheckboxActivity.this,i+" " ,Toast.LENGTH_SHORT).show();
}
});
}
public void onItemClick(AdapterView parent, View view, int
position, long id) {
mCheckBoxAdapter.toggle(position);
}
private static class CheckBoxAdapter extends ArrayAdapter<String>
implements CompoundButton.OnCheckedChangeListener {
public CheckBoxAdapter(Context context, int resource, String[]
objects) {
super(context, resource, objects);
mCheckStates = new SparseBooleanArray(objects.length);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final CheckBox view = (CheckBox) super.getView(position,
convertView, parent);
view.setTag(position);
view.setChecked(mCheckStates.get(position, false));
view.setOnCheckedChangeListener(this);
return view;
}
public boolean isChecked(int position) {
return mCheckStates.get(position, false);
}
public void setChecked(int position, boolean isChecked) {
mCheckStates.put(position, isChecked);
notifyDataSetChanged();
}
public void toggle(int position) {
setChecked(position, !isChecked(position));
}
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
mCheckStates.put((Integer) buttonView.getTag(), isChecked);
}
}
private static final String[] GENRES = new String[] {
"Action", "Adventure", "Animation", "Children", "Comedy",
"Documentary", "Drama",
"Foreign", "History", "Independent", "Romance", "Sci-Fi",
"Television", "Thriller"
};
}
HUH ?!請考慮把你的段落分成幾塊。很難理解5行句子描述你的檢查項目的流程。 – Jack
@Jack你好,我想現在我解釋正確的問題,請幫助。 –
你有沒有想過這個?我只是注意到,在你的for循環btn onClickListener,你是從i = 1,到mCheckStates.size()+ 1,我認爲這應該只是mCheckStates.size() – Jack