如何从列表视图中删除选定的项目时,请在Android的删除按钮 [英] How to remove selected items from listview when click remove button in android

查看:165
本文介绍了如何从列表视图中删除选定的项目时,请在Android的删除按钮的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我显示在列表视图名称,以及复选框,在这里我有按钮,如果单击该按钮,那个时候我需要删除选定的项目,从名单来看,保持项目只有我需要在列表视图中显示,使用下面我$ C $词可以找到什么是我选择的项目,但我不知道如何删除这些,你可以任何一个建议我

  MainActivity.class:
   公共类MainActivity延伸活动{ 私人的ListView列表视图;
 ArrayList的<串GT;项目=新的ArrayList<串GT;();
 私人诠释计数;
 私人布尔[] thumbnailsselection;
 @覆盖
 保护无效的onCreate(捆绑savedInstanceState){
      super.onCreate(savedInstanceState);
      的setContentView(R.layout.activity_main);
      fillarray();
      数= items.size();
      thumbnailsselection =新的布尔[计数]
      列表视图=(ListView控件)findViewById(R.id.listView1);
      listview.setAdapter(新ImageAdapter(MainActivity.this));
 }
 私人无效fillarray(){
      // TODO自动生成方法存根
      items.clear();
      items.add(Android的阿尔法);
      items.add(Android测试版);
      items.add(1.5蛋糕(API等级3));
      items.add(1.6甜甜圈(API等级4));
      items.add(2.0 Eclair的(API级别5));
      items.add(2.0.1巧克力慕斯蛋糕(API等级6)); }
 @覆盖
 公共布尔onCreateOptionsMenu(菜单菜单){
      //充气菜单;如果是present这增加了项目操作栏。
      。getMenuInflater()膨胀(R.menu.activity_main,菜单);
      返回true;
 }
 公共类ImageAdapter延伸BaseAdapter {
      私人LayoutInflater mInflater;
      私人语境mContext;
      公共ImageAdapter(上下文的背景下){
           mContext =背景;
      }
      公众诠释的getCount(){
           返回计数;
      }
      公共对象的getItem(INT位置){
           返回的位置;
      }
      众长getItemId(INT位置){
           返回的位置;
      }
      公共查看getView(INT位置,查看convertView,父母的ViewGroup){
           ViewHolder持有人;
           如果(convertView == NULL){
                持有人=新ViewHolder();
                convertView = LayoutInflater.from(mContext).inflate(
                          R.layout.row_photo,NULL);
                holder.textview =(TextView中)convertView
                          .findViewById(R.id.thumbImage);
                holder.checkbox =(复选框)convertView
                          .findViewById(R.id.itemCheckBox);
                convertView.setTag(保持器);
           }其他{
                支架=(ViewHolder)convertView.getTag();
           }
           holder.checkbox.setId(位置);
           holder.textview.setId(位置);
           holder.checkbox.setOnClickListener(新OnClickListener(){
                公共无效的onClick(视图v){
                     // TODO自动生成方法存根
                     复选框CB =(复选框)V;
                     INT ID = cb.getId();
                     如果(thumbnailsselection [ID]){
                          cb.setChecked(假);
                          thumbnailsselection [ID] = FALSE;
                     }其他{
                          cb.setChecked(真);
                          thumbnailsselection [ID] =真;
                     }
                }
           });
           holder.textview.setOnClickListener(新OnClickListener(){
                公共无效的onClick(视图v){
                     // TODO自动生成方法存根
                     INT ID = v.getId();
                }
           });
           holder.textview.setText(items.get(位置));
           holder.checkbox.setChecked(thumbnailsselection [位置]);
           holder.id =位置;
           返回convertView;
      }    公共无效为removeItems()
      {
          notifyDataSetChanged();
      }
 }
 类ViewHolder {
      TextView中的TextView;
      复选框复选框;
      INT ID;
 }
 公共无效点击(视图v){
      如果(v.getId()== R.id.button1){           布尔noSelect = FALSE;           的for(int i = 0; I< thumbnailsselection.length;我++){
              如果(thumbnailsselection [I] ==真){
                   noSelect =真;                       items.remove(ⅰ);                }
         }
          thumbnailsselection =新的布尔[items.size()];
         adapter.removeItems();
      }
 }
}


解决方案

  1. 记录所有复选框的状态。


    • 数据类型的 SparseBooleanArray 好过布尔[] 这里。

    • 初始化的 thumbnailsselection ImageAdapter建筑工,然后在checkbox.setOnCheckedChangeListener修改其值(新的 OnCheckedChangeListener (){})。

    //初始化

     的for(int i = 0; I< ITEMCOUNT;我++)
        thumbnailsselection.put(I,FALSE);

    //修改

      holder.checkbox.setOnCheckedChangeListener(新OnCheckedChangeListener(){
        @覆盖
        公共无效onCheckedChanged(CompoundButton buttonView,布尔器isChecked){
            INT位置= buttonView.getId();
            thumbnailsselection.put(位置,器isChecked);
        }
    });


  2. 删除从后到前项的 一个接一个,因为删除只影响后面的删除了一个项目的索引。

     的for(int i = ITEMCOUNT  -  1; I> = 0;我 - ){
        位置= thumbnailsselection.keyAt(ⅰ);
        =器isChecked thumbnailsselection.get(位置,FALSE);    如果(!器isChecked)
            继续;    如果(位置< items.size())
            items.remove(位置);
    }


  3. 显示新的数据。

      imageAdapter.notifyDataSetChanged();


am displaying names in list view, with check boxes,here i have button if i click that button that time i need to remove selected items and from list view, remain items only i need to show in list view,using below i code i can find what are the items i selected but i dont know how to remove those, can you any one suggest me

MainActivity.class: 
   public class MainActivity extends Activity {

 private ListView listview;  
 ArrayList<String> items = new ArrayList<String>();  
 private int count;  
 private boolean[] thumbnailsselection;  
 @Override  
 protected void onCreate(Bundle savedInstanceState) {  
      super.onCreate(savedInstanceState);  
      setContentView(R.layout.activity_main);  
      fillarray();  
      count = items.size();  
      thumbnailsselection = new boolean[count];  
      listview = (ListView) findViewById(R.id.listView1);  
      listview.setAdapter(new ImageAdapter(MainActivity.this));  
 }  
 private void fillarray() {  
      // TODO Auto-generated method stub  
      items.clear();  
      items.add("Android alpha");  
      items.add("Android beta");  
      items.add("1.5 Cupcake (API level 3)");  
      items.add("1.6 Donut (API level 4)");  
      items.add("2.0 Eclair (API level 5)");  
      items.add("2.0.1 Eclair (API level 6)");  

 }  
 @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;  
 }  
 public class ImageAdapter extends BaseAdapter {  
      private LayoutInflater mInflater;  
      private Context mContext;  
      public ImageAdapter(Context context) {  
           mContext = context;  
      }  
      public int getCount() {  
           return count;  
      }  
      public Object getItem(int position) {  
           return position;  
      }  
      public long getItemId(int position) {  
           return position;  
      }  
      public View getView(int position, View convertView, ViewGroup parent) {  
           ViewHolder holder;  
           if (convertView == null) {  
                holder = new ViewHolder();  
                convertView = LayoutInflater.from(mContext).inflate(  
                          R.layout.row_photo, null);  
                holder.textview = (TextView) convertView  
                          .findViewById(R.id.thumbImage);  
                holder.checkbox = (CheckBox) convertView  
                          .findViewById(R.id.itemCheckBox);  
                convertView.setTag(holder);  
           } else {  
                holder = (ViewHolder) convertView.getTag();  
           }  
           holder.checkbox.setId(position);  
           holder.textview.setId(position);  
           holder.checkbox.setOnClickListener(new OnClickListener() {  
                public void onClick(View v) {  
                     // TODO Auto-generated method stub  
                     CheckBox cb = (CheckBox) v;  
                     int id = cb.getId();  
                     if (thumbnailsselection[id]) {  
                          cb.setChecked(false);  
                          thumbnailsselection[id] = false;  
                     } else {  
                          cb.setChecked(true);  
                          thumbnailsselection[id] = true;  
                     }  
                }  
           });  
           holder.textview.setOnClickListener(new OnClickListener() {  
                public void onClick(View v) {  
                     // TODO Auto-generated method stub  
                     int id = v.getId();  
                }  
           });  
           holder.textview.setText(items.get(position));  
           holder.checkbox.setChecked(thumbnailsselection[position]);  
           holder.id = position;  
           return convertView;  
      }  

    public void removeItems()
      {
          notifyDataSetChanged();
      }
 }  
 class ViewHolder {  
      TextView textview;  
      CheckBox checkbox;  
      int id;  
 }  
 public void click(View v) {  
      if (v.getId() == R.id.button1) {  

           boolean noSelect = false;  

           for (int i = 0; i < thumbnailsselection.length; i++) {  
              if (thumbnailsselection[i] == true) {  
                   noSelect = true;  

                       items.remove(i);

                }  


         }  
          thumbnailsselection = new boolean[items.size()];
         adapter.removeItems(); 
      }  
 }  
}

解决方案

  1. Record the state of all CheckBox.

    • Data type SparseBooleanArray is better than boolean[] here.
    • Initialize thumbnailsselection in ImageAdapter constructer, and modify its values in checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {}).

    // Initialize

    for (int i = 0; i < itemCount; i++)
        thumbnailsselection.put(i, false);
    

    // Modify

    holder.checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            int position = buttonView.getId();
            thumbnailsselection.put(position, isChecked);
        }
    });
    

  2. Remove items from back to front, one by one, because the deletion only affects indices of items behind the removed one.

    for (int i = itemCount - 1; i >= 0; i--) {
        position = thumbnailsselection.keyAt(i);
        isChecked = thumbnailsselection.get(position, false);
    
        if (!isChecked)
            continue;
    
        if (position < items.size())
            items.remove(position);
    }
    

  3. Show new data.

    imageAdapter.notifyDataSetChanged();
    

这篇关于如何从列表视图中删除选定的项目时,请在Android的删除按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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