选择所有方法来选择listview android中的所有复选框不起作用

时间:2013-03-08 08:19:43

标签: android android-layout android-listview android-checkbox

我有自定义适配器来填充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);
                        }
                    }
                }
            });`

帮助表示赞赏。谢谢

3 个答案:

答案 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