我想创建一个按钮,单击该按钮时,将检查自定义ListView中的所有项目。 ListView包含3个TextView和1个CkeckBox。适配器如下:
public View getView(final int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(id, null);
}
final Item o = items.get(position);
if (o != null) {
TextView t1 = (TextView) v.findViewById(R.id.TextView01);
TextView t2 = (TextView) v.findViewById(R.id.TextView02);
TextView t3 = (TextView) v.findViewById(R.id.TextViewDate);
final CheckBox checkBox1 = (CheckBox) v.findViewById(R.id.checkBox1);
checkBox1.setTag(o.getPath());
checkBox1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int getPosition = (Integer) buttonView.getTag(); // Here we get the position that we have set for the checkbox using setTag.
items.get(getPosition).setSelected(buttonView.isChecked()); // Set the value of checkbox to maintain its state.
// TODO Auto-generated method stub
CheckBox cb = (CheckBox) buttonView ;
if(cb.isChecked()){
if(!FileChooser1.clickedItems.contains(o.getPath())){
FileChooser1.clickedItems.add(o.getPath());
}
}else{
FileChooser1.clickedItems.remove(o.getPath());
}
}
});
checkBox1.setTag(position);
ImageView imageCity = (ImageView) v.findViewById(R.id.fd_Icon1);
String uri = "drawable/" + o.getImage();
int imageResource = c.getResources().getIdentifier(uri, null, c.getPackageName());
Drawable image = c.getResources().getDrawable(imageResource);
imageCity.setImageDrawable(image);
if(t1!=null)
t1.setText(o.getName());
if(t2!=null)
t2.setText(o.getData());
if(t3!=null)
t3.setText(o.getDate());
if(o.getImage().equals("directory_up")){
checkBox1.setVisibility(View.GONE);
}else{
checkBox1.setVisibility(View.VISIBLE);
}
if(someBoolean == true)
{
checkBox1.setChecked(true);// here i set the checkbox to true for all items
}
}
return v;
}
}
FileChooser1.clickedItems是一个包含所有点击项目的ArrayList,问题是只有在屏幕上看到的项目被添加到ArrayList,我的意思是例如当我滚动到手机屏幕的底部时,只有那些项目屏幕上显示的内容将添加到列表中。例如,我有20个项目,首先当我打开活动时它只向ArrayList添加8个第一项,如果我进一步向下滚动,那么出现在底部的那些项目将被添加到arraylist,不管怎么说都没有将所有项目添加到列表而不滚动?非常感谢
答案 0 :(得分:0)
如果你想要一个按钮检查ListView中的所有项目,这里是食谱:
为您的inFileChooser
课程添加一个带有getter和setter的布尔Item
:
private boolean mInFileChooser;
public boolean isInFileChooser() {
return mIsInFileChooser;
}
public void setInFileChooser(boolean inFileChooser) {
mInFileChooser = inFileChooser;
if (inFileChooser) {
FileChooser1.clickedItems.add(getPath());
} else {
FileChooser1.clickedItems.remove(getPath());
}
}
在适配器中创建视图时,您可以调用:
checkbox1.setChecked(o.isInFileChooser());
在MVC术语中,这是 View 从模型
获取其初始值的位置在设置OnCheckedChangedListener之前执行此,这样就不会触发它。
然后设置OnCheckedChangedListener。在OnCheckedChangedListener.onCheckChanged中,您可以调用:
o.setInFileChooser(isChecked);
在MVC术语中, Controller (OnCheckedChangedListener)将视图中的更改传输到模型。
Button将获得一个OnClickListener,它将迭代ListView适配器中的所有项目,在它们上设置isInFileChooser(true)
,并告诉适配器模型已更改,是时候更新ListView。
例如,在适配器列表上有一个方法:
public void selectAllItems() {
for (Item item : items) {
item.setInFileChooser(true);
}
notifyDataSetChanged();
}
然后:
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// acccess the adapter here
adapter.selectAllItems();
}
});