我有自定义适配器来填充listview,每个项目都有名称和复选框。现在我在列表顶部添加了一个按钮以启用选择所有项目,但不知何故它不起作用我无法弄清楚我错在哪里。它都没有抛出任何错误。这是我的代码。 `
send_show12.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// flag = !flag;
//lv = get
int size = lv.getCount();
`Log.d("This is count is at button listener", ""+size);
if(lv.isItemChecked(1)){
for(int i = 0; i<=size; i++){
lv.setItemChecked(i, true);
}
} else {
for(int i = 0; i<=size; i++){
lv.setItemChecked(i, false);
}
}
}
});`
帮助表示赞赏。谢谢
答案 0 :(得分:3)
当您使用复选框滚动列表视图时,项目的位置将会更改,以便可以取消选中已选中的项目,并且可以选中未选中的项目。这就是为什么所选列表项目未正确显示的原因。(您是否观察到此问题? ) 要解决此问题,您必须使用ArrayAdapter而不是baseAdapter。 Please follow this link to over come the issue.
而不是PlanetsActivity类使用此类保持不变...
public class PlanetsActivity extends Activity {
private ListView mainListView;
//private Planet[] planets;
ArrayList<Planet> planets=new ArrayList<Planet>();
private ArrayAdapter<Planet> listAdapter;
/** Called when the activity is first created. */
@SuppressWarnings("unchecked")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Find the ListView resource.
mainListView = (ListView) findViewById(R.id.listView1);
// When item is tapped, toggle checked properties of CheckBox and
// Planet.
mainListView
.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View item,
int position, long id) {
Planet planet = listAdapter.getItem(position);
planet.toggleChecked();
PlanetViewHolder viewHolder = (PlanetViewHolder) item
.getTag();
viewHolder.getCheckBox().setChecked(planet.isChecked());
}
});
Button bt=(Button)findViewById(R.id.yourbutton);
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
planets.clear();
for(int i=1;i<15;i++){
planets.add(new Planet(""+i,true));
}
listAdapter = new PlanetArrayAdapter(this, planets);
mainListView.setAdapter(listAdapter);
}
});
planets.add(new Planet("1", false));
planets.add(new Planet("2", false));
planets.add(new Planet("3", false));
planets.add(new Planet("4", false));
planets.add(new Planet("5", false));
planets.add(new Planet("6", false));
planets.add(new Planet("7", false));
planets.add(new Planet("8", false));
planets.add(new Planet("9", false));
planets.add(new Planet("10", false));
planets.add(new Planet("11", false));
planets.add(new Planet("12", false));
planets.add(new Planet("13", false));
planets.add(new Planet("14", false));
listAdapter = new PlanetArrayAdapter(this, planets);
mainListView.setAdapter(listAdapter);
}
public Object onRetainNonConfigurationInstance() {
return planets;
}}
答案 1 :(得分:0)
您正在尝试查看代表您商品的视图。你说你有一个复选框和一个文本,所以我认为它是一个LinearLayout。 LinearLayout没有实现Checkable,因此你无法检查它。
你可以实现LiearLayout的子类来实现Checkable(这不好玩,我见过的网上大多数免费解决方案要么被设计破坏,要么不完整,以致它们在任何情况下都无法工作)或者你在循环中的LinearLayout中查找CheckBox。
答案 2 :(得分:0)
我使用HashMap来跟踪所选项目的ID