【问题标题】:select all method to select all checkbox in listview android not working全选方法在listview android中选择所有复选框不起作用
【发布时间】:2013-03-08 08:19:43
【问题描述】:

我有自定义适配器来填充列表视图,其中包含每个项目的名称和复选框。现在我在列表顶部添加了一个按钮以启用选择所有项目,但不知何故它不起作用我无法弄清楚我错在哪里。它也没有抛出任何错误。这是我的代码。 `

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

帮助表示赞赏。谢谢

【问题讨论】:

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


    【解决方案1】:

    当您使用复选框滚动列表视图时,项目的位置会发生变化,因此选中的项目可能未选中,未选中的项目可能已选中。所以为什么选择的列表项目无法正确显示。(您是否观察到这个问题?? ) 要解决此问题,您必须使用 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;
    }}  
    

    【讨论】:

      【解决方案2】:

      您正在尝试检查代表您的项目的视图。你说你有一个复选框和一个文本,所以我认为它是一个线性布局。 LinearLayout 没有实现 Checkable,因此您无法检查它。

      您可以实现一个 LiearLayout 的子类,该子类实现 Checkable(这并不好玩,我见过的大多数网络上的免费解决方案要么被设计破坏,要么不完整,因此它们无法在所有情况下工作),或者您在循环中的 LinearLayout 中查找 CheckBox。

      【讨论】:

        【解决方案3】:

        我使用 HashMap 来跟踪所选项目的 ID

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-11-27
          • 2012-11-24
          • 1970-01-01
          • 2019-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多