国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android實現ListView控件的多選和全選功能實例

2019-10-22 18:32:57
字體:
來源:轉載
供稿:網友

本文實例講述了Android實現ListView控件的多選和全選功能。分享給大家供大家參考,具體如下:

主程序代碼

MainActivity.Java

package yy.test;import java.util.ArrayList;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.SubMenu;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.CheckBox;import android.widget.ListAdapter;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity {  private ListView listView;  private MyAdapter adapter;  private ArrayList<String> items;  //模擬存儲信息的集合  private ArrayList<String> checked; //該集合存儲被選中的列表項中的TextView中所顯示的字符串  private boolean isMultiple = false; // 記錄是否是多選狀態,true為是,false不是  @Override  public void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.main);    listView = (ListView) findViewById(R.id.listview);    items = new ArrayList<String>();    items.add("00000");    items.add("11111");    items.add("22222");    items.add("33333");    items.add("44444");    items.add("55555");    items.add("66666");    items.add("77777");    items.add("88888");    items.add("99999");    items.add("aaaaa");    items.add("bbbbb");    items.add("ccccc");    items.add("ddddd");    adapter = new MyAdapter(items,this); //new出自定義的MyAdapter對象    listView.setAdapter(adapter);    listView.setOnItemClickListener(new OnItemClickListener() {      @Override      public void onItemClick(AdapterView<?> arg0, View view, int position,          long arg3) {        if(isMultiple){          CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkbox);          TextView textView = (TextView) view.findViewById(R.id.text);          if(checkBox.isChecked()){            checkBox.setChecked(false);            adapter.checkedMap.put(position, false);            textView.setTextColor(Color.WHITE);            adapter.colorMap.put(position, Color.WHITE);            int index = checked.indexOf(textView.getText()+"");            checked.remove(index);          }else{            checkBox.setChecked(true);            adapter.checkedMap.put(position, true);            textView.setTextColor(Color.RED);            adapter.colorMap.put(position, Color.RED);            checked.add(textView.getText()+"");          }        }      }    });  }  @Override  public boolean onCreateOptionsMenu(Menu menu) {    SubMenu subMenu = menu.addSubMenu("操作");    subMenu.add(0, 1, 0, "多選");    subMenu.add(0, 2, 0, "刪除");    subMenu.add(0, 3, 0, "全選");    subMenu.add(0, 4, 0, "取消全選");    return super.onCreateOptionsMenu(menu);  }  @Override  public boolean onOptionsItemSelected(MenuItem item) {    if(item.getItemId()==1){      isMultiple = true;      checked = new ArrayList<String>();      int index = adapter.getCount();      for(int i=0;i<index;i++){        adapter.visibleMap.put(i, CheckBox.VISIBLE);      }      adapter.notifyDataSetChanged();    }else if(item.getItemId()==2){      for(String text : checked){        int index = items.indexOf(text);        items.remove(index);      }      isMultiple = false;      adapter = new MyAdapter(items,MainActivity.this);      listView.setAdapter(adapter);    }else if(item.getItemId()==3){      isMultiple = true;      checked = new ArrayList<String>();      int index = adapter.getCount();      for(int i=0;i<index;i++){        adapter.checkedMap.put(i, true);        adapter.colorMap.put(i, Color.RED);        adapter.visibleMap.put(i, CheckBox.VISIBLE);        View view1 = adapter.getView(i, null, null);        TextView textView = (TextView) view1.findViewById(R.id.text);        textView.setTextColor(Color.RED);        /*CheckBox checkBox = (CheckBox) view1.findViewById(R.id.checkbox);        checkBox.setVisibility(CheckBox.VISIBLE);*/        adapter.notifyDataSetChanged();        checked.add(textView.getText()+"");      }    }else if(item.getItemId()==4){      isMultiple = false;      checked = null;      int index = adapter.getCount();      for(int i=0;i<index;i++){        adapter.checkedMap.put(i, false);        adapter.colorMap.put(i, Color.WHITE);        adapter.visibleMap.put(i, CheckBox.INVISIBLE);        /*View view1 = adapter.getView(i, null, null);        TextView textView = (TextView) view1.findViewById(R.id.text);        textView.setTextColor(Color.WHITE);        CheckBox checkBox = (CheckBox) view1.findViewById(R.id.checkbox);        checkBox.setVisibility(CheckBox.INVISIBLE);*/        adapter.notifyDataSetChanged();      }    }    return super.onOptionsItemSelected(item);  }}

繼承自BaseAdapter的MyAdapter

package yy.test;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Color;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.CheckBox;import android.widget.ImageView;import android.widget.TextView;public class MyAdapter extends BaseAdapter {  private LayoutInflater inflater;  private ArrayList<String> items;  private Bitmap icon;  private Context context;  public Map<Integer,Boolean> checkedMap;  //保存checkbox是否被選中的狀態  public Map<Integer,Integer> colorMap;   //保存textview中文字的狀態  public Map<Integer,Integer> visibleMap;  //保存checkbox是否顯示的狀態  public MyAdapter(ArrayList<String> items, Context context) {    super();    this.items = items;    this.context = context;    inflater = LayoutInflater.from(context);    icon = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon);    checkedMap = new HashMap<Integer, Boolean>();    colorMap = new HashMap<Integer, Integer>();    visibleMap = new HashMap<Integer, Integer>();    for(int i=0;i<items.size();i++){      checkedMap.put(i, false);      colorMap.put(i, Color.WHITE);      visibleMap.put(i, CheckBox.INVISIBLE);    }  }  @Override  public int getCount() {    // TODO Auto-generated method stub    return items.size();  }  @Override  public Object getItem(int arg0) {    // TODO Auto-generated method stub    return arg0;  }  @Override  public long getItemId(int arg0) {    // TODO Auto-generated method stub    return arg0;  }  @Override  public View getView(int position, View view, ViewGroup arg2) {    view = inflater.inflate(R.layout.file_row, null);    ImageView image = (ImageView) view.findViewById(R.id.icon);    TextView text = (TextView) view.findViewById(R.id.text);    CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkbox);    checkBox.setVisibility(visibleMap.get(position));    checkBox.setChecked(checkedMap.get(position));    image.setImageBitmap(icon);    text.setText(items.get(position));    text.setTextColor(colorMap.get(position));    return view;  }}

主界面的布局文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:orientation="vertical"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  >  <ListView  android:id="@+id/listview"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  /></LinearLayout>

MyAdapter中所使用的布局文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" > <ImageView android:id="@+id/icon" android:layout_width="30dp" android:layout_height="30dp" android:layout_gravity="center_vertical" /> <TextView android:id="@+id/text" android:layout_width="80dp" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:paddingLeft="5dp" /> <CheckBox android:id="@+id/checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:focusable="false" android:clickable="false" android:focusableInTouchMode="false" /></LinearLayout>

下面來分析為什么要用map來保存checkbox以及textview的狀態。

這個與ListView的刷新機制有關,當你的listview對象很多的時候,每次你拖動listview上下滾動,listview都會刷新一次。怎么刷新呢?比如一個屏幕它最多只顯示七條listview,如果你有十條數據,當你想看第八條時,第一條數據理所當然的要被隱藏掉,而第八條數據會被顯示,這時listview就刷新了。如果你不保存你所選的checkbox的狀態,這時如果你選的是第一條的checkbox的狀態為true,當你把余下的第八、第九、第十條數據顯示出來時,第十條的checkbox的狀態會顯示為true,但是它的狀態沒有被保存,只是你看到它是被選中了而已,其實你選的還是第一條數據。這個問題很操蛋。還有一個更離奇的狀態,你讓checkbox的狀態為true,數據一定要大于十條,你不停的上下拖動屏幕,你會看見checkbox的顯示狀態會亂跳,但是你實際上選擇的還是第一條數據,只是會讓你的用戶感覺很不爽罷了。

希望本文所述對大家Android程序設計有所幫助。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 称多县| 宾阳县| 收藏| 策勒县| 高邮市| 吴江市| 万州区| 吉安县| 上虞市| 泸西县| 安塞县| 太仓市| 革吉县| 郑州市| 白朗县| 滨州市| 宁蒗| 葵青区| 廊坊市| 南江县| 永定县| 靖边县| 丰宁| 兰西县| 邵东县| 玛纳斯县| 贞丰县| 陵水| 宽甸| 红原县| 开化县| 女性| 西平县| 灵川县| 松溪县| 台南县| 莫力| 青神县| 南澳县| 得荣县| 乐清市|