使用复选框的Andr​​oid从列表视图中删除muliple项目 [英] Removing muliple items from listview using Check box in Android

查看:116
本文介绍了使用复选框的Andr​​oid从列表视图中删除muliple项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好我坚持使用复选框从列表视图中删除多个项目。我能够选择从列表视图,但仅所选择的第一个项目的多个项目,是越来越而其他项目不被删除删除。这是我的code。在此先感谢!

 公共类MainActivity扩展活动
{
    ListView的LV;
    ArrayAdapter<字符串>适配器;
    按钮删除;
    ArrayList的<字符串>数据=新的ArrayList<字符串>();
    @覆盖
    保护无效的onCreate(包savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);
        LV =(ListView控件)findViewById(R.id.listView1);
        删除=(按钮)findViewById(R.id.button1);
        data.add(视窗);
        data.add(机器人);
        data.add(苹果);
        data.add(黑莓);
        适配器=新的ArrayAdapter<字符串>(MainActivity.this,android.R.layout.simple_list_item_multiple_choice,数据);
        lv.setAdapter(适配器);

        delete.setOnClickListener(新OnClickListener()
        {
            @覆盖
            公共无效的onClick(视图v)
            {
                deleteCheckedItems();
                adapter.notifyDataSetChanged();
            }
        });


    }

    @覆盖
    公共布尔onCreateOptionsMenu(菜单菜单)
    {
        //充气菜单;这增加了项目操作栏,如果它是present。
        。getMenuInflater()膨胀(R.menu.activity_main,菜单);
        返回true;
    }
    私人无效deleteCheckedItems(){
        诠释计数= adapter.getCount();

        的for(int i = 0; I<计数;我++)
        {
            如果(lv.isItemChecked(i))的
            {
               data.remove(ⅰ);
            }
        }
    }

}
 

解决方案

使用一个SparseBooleanArray得到检查的项目,然后删除相同,刷新列表视图。

 公共类MainActivity扩展活动
{
    ListView的LV;
    ArrayAdapter<字符串>适配器;
    按钮删除;
    ArrayList的<字符串>数据=新的ArrayList<字符串>();
    SparseBooleanArray mCheckStates;
    @覆盖
    保护无效的onCreate(包savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.test);
        LV =(ListView控件)findViewById(R.id.listView1);
        lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        删除=(按钮)findViewById(R.id.button1);
        data.add(视窗);
        data.add(机器人);
        data.add(苹果);
        data.add(黑莓);
        适配器=新的ArrayAdapter<字符串>(MainActivity.this,android.R.layout.simple_list_item_multiple_choice,数据);
        lv.setAdapter(适配器);

        delete.setOnClickListener(新OnClickListener()
        {
            @覆盖
            公共无效的onClick(视图v)
            {

                SparseBooleanArray检查= lv.getCheckedItemPositions();
                的for(int i = 0; I< lv.getCount();我++){

                    如果(checked.get(我)==真)
                    {
                         data.remove(ⅰ);

                    }
                    adapter.notifyDataSetChanged();

                }
                 lv.clearChoices();
            }
        });


    }
}
 

编辑:

请尝试以下

  delete.setOnClickListener(新OnClickListener()
    {
        @覆盖
        公共无效的onClick(视图v)
        {

             SparseBooleanArray checkedItemPositions = lv.getCheckedItemPositions();
             INT ItemCount中= lv.getCount();

             的for(int i = ItemCount中-1; I> = 0; I  - ){
                 如果(checkedItemPositions.get(i))的{
                     adapter.remove(data.get(ⅰ));
                 }
             }
             checkedItemPositions.clear();
             adapter.notifyDataSetChanged();

        }
    });
 

Hi i am stuck with deleting multiple items from listview using checkbox. I am able to select multiple items from listview but only the first item that is selected, is getting deleted while other items are not being deleted. Here is my code. Thanks in Advance!

public class MainActivity extends Activity 
{
    ListView lv;
    ArrayAdapter<String> adapter;
    Button delete;
    ArrayList<String> data = new ArrayList<String>();
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (ListView)findViewById(R.id.listView1);
        delete = (Button)findViewById(R.id.button1);
        data.add("Windows");
        data.add("Android");
        data.add("Apple");
        data.add("Blackberry");
        adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_multiple_choice, data);
        lv.setAdapter(adapter);

        delete.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                deleteCheckedItems();
                adapter.notifyDataSetChanged();
            }
        });


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    private void deleteCheckedItems() {
        int count = adapter.getCount();

        for (int i = 0; i < count; i++) 
        {
            if (lv.isItemChecked(i))
            {
               data.remove(i);
            }
        }
    }

}

解决方案

Use a SparseBooleanArray to get the checked items and then delete the same and refresh listview.

public class MainActivity extends Activity 
{
    ListView lv;
    ArrayAdapter<String> adapter;
    Button delete;
    ArrayList<String> data = new ArrayList<String>();
    SparseBooleanArray mCheckStates ;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);
        lv = (ListView)findViewById(R.id.listView1);
        lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        delete = (Button)findViewById(R.id.button1);
        data.add("Windows");
        data.add("Android");
        data.add("Apple");
        data.add("Blackberry");
        adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_multiple_choice, data);
        lv.setAdapter(adapter);

        delete.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {

                SparseBooleanArray checked = lv.getCheckedItemPositions();
                for (int i = 0; i < lv.getCount(); i++){

                    if (checked.get(i)==true)
                    {
                         data.remove(i);

                    } 
                    adapter.notifyDataSetChanged(); 

                }
                 lv.clearChoices();               
            }
        });


    }
}

Edit:

Try the below

 delete.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {

             SparseBooleanArray checkedItemPositions = lv.getCheckedItemPositions();
             int itemCount = lv.getCount();

             for(int i=itemCount-1; i >= 0; i--){
                 if(checkedItemPositions.get(i)){
                     adapter.remove(data.get(i));
                 }
             }
             checkedItemPositions.clear();
             adapter.notifyDataSetChanged();

        }
    });

这篇关于使用复选框的Andr​​oid从列表视图中删除muliple项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆