CheckBox與ListView的結(jié)合使用

實(shí)現(xiàn)效果: 長(zhǎng)按LitsView的item時(shí), CheckBox顯示,CheckBox可選中,在這個(gè)效果當(dāng)中可能會(huì)有CheckBox被選中時(shí)出現(xiàn)混亂的情況,在此記錄一下這個(gè)解決辦法.

  1. 先做準(zhǔn)備工作: 一個(gè)listview 的item行布局

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="match_parent"
          android:layout_height="match_parent">
    <TextView
    android:layout_margin="10dp"
    android:id="@+id/tv_item_list_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
    <TextView
    android:layout_margin="10dp"
    android:layout_toRightOf="@id/tv_item_list_name"
    android:id="@+id/tv_item_list_age"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
    <CheckBox
    android:layout_alignParentRight="true"
    android:layout_margin="10dp"
    android:visibility="gone"
    android:id="@+id/ckb_item_list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
    </RelativeLayout>
    
  2. listview的adapter

                                                                                                                                            package com.limiao.checkbox;     
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.CheckBox;
    import android.widget.CompoundButton;
    import android.widget.TextView;
    
    import java.util.List;
    import java.util.zip.Inflater;
    
    /**
     * Created by limiao on 16/11/24.
     */
    
    public class MyAdapter extends BaseAdapter {
    private List<Person> mPersons;
    private Context mContext;
    private boolean mVisibility = false;// checkbox是否顯示,默認(rèn)不顯示
    public MyAdapter(Context context) {
    mContext = context;
    notifyDataSetChanged();
    }
    
    public void setVisibility(boolean visibility) {
    mVisibility = visibility;
    notifyDataSetChanged();
    }
    
    public void setPersons(List<Person> persons) {
    mPersons = persons;
    notifyDataSetChanged();
    }
    
    @Override
    public int getCount() {
    return mPersons == null ? 0 : mPersons.size();
    }
    
    @Override
    public Object getItem(int position) {
    return mPersons.get(position);
    }
    
    @Override
    public long getItemId(int position) {
    return position;
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;
    if (convertView == null) {
        convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, parent, false);
        holder = new ViewHolder(convertView);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    Person person = mPersons.get(position);
    holder.mNameTv.setText(person.getName());
    holder.mAgeTv.setText(person.getAge());
    if (mVisibility) {
        holder.mCheckBox.setVisibility(View.VISIBLE);
        final ViewHolder finalHolder = holder;
    
        /**
         * 此處要用setOnClickListener,而不是setOnCheckedChangeListener()
         * 否則會(huì)出現(xiàn)混亂的情況
         */
    
        holder.mCheckBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                CheckBox checkBox = (CheckBox) v;
                finalHolder.mCheckBox.setChecked(checkBox.isChecked());
            }
        });
    }
    return convertView;
    }
    
    private static class ViewHolder {
    private TextView mNameTv;
    private TextView mAgeTv;
    private CheckBox mCheckBox;
    
    public ViewHolder(View view) {
        mNameTv = (TextView) view.findViewById(R.id.tv_item_list_name);
        mAgeTv = (TextView) view.findViewById(R.id.tv_item_list_age);
        mCheckBox = (CheckBox) view.findViewById(R.id.ckb_item_list);
    }
    

    }

在為CheckBox設(shè)置選中狀態(tài)時(shí),這里需要用setOnClickListener(),才不會(huì)出現(xiàn)混亂,如果用setOnCheckedChangeListener()就會(huì)出現(xiàn)以下的情況

CheckBox的選中狀態(tài)出現(xiàn)混亂
  1. 一個(gè)很簡(jiǎn)單的實(shí)體類
    package com.limiao.checkbox;
    /**
     * Created by limiao on 16/11/23.
     */

    public class Person  {
    String  name ;
    String age;

    public Person(String name, String age) {
    this.name = name;
    this.age = age;
    }

    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    public String getAge() {
    return age;
    }

    public void setAge(String age) {
    this.age = age;
    }
    }
  1. 最后是MainActivity

    package com.limiao.checkbox;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ListView;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class MainActivity extends AppCompatActivity {
    private ListView mListView;
    private MyAdapter mMyAdapter;
    private List<Person> mPersons;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mListView = (ListView) findViewById(R.id.lv_aty_main);
    mPersons = new ArrayList<>();
    for (int i = 0; i < 90; i++) {
        Person person = new Person("aaa","34");
        mPersons.add(person);
    }
    mMyAdapter = new MyAdapter(this);
    mMyAdapter.setPersons(mPersons);
    mListView.setAdapter(mMyAdapter);
    mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            mMyAdapter.setVisibility(true);
            return false;
        }
    });
    }
    }
    

demo的完整的下載地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末婴噩,一起剝皮案震驚了整個(gè)濱河市迅诬,隨后出現(xiàn)的幾起案子沸移,更是在濱河造成了極大的恐慌,老刑警劉巖晴音,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡夺姑,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門掌猛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盏浙,“玉大人,你說我怎么就攤上這事荔茬》媳欤” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵慕蔚,是天一觀的道長(zhǎng)丐黄。 經(jīng)常有香客問我,道長(zhǎng)孔飒,這世上最難降的妖魔是什么灌闺? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮坏瞄,結(jié)果婚禮上桂对,老公的妹妹穿的比我還像新娘。我一直安慰自己鸠匀,他們只是感情好蕉斜,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著狮崩,像睡著了一般蛛勉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上睦柴,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天诽凌,我揣著相機(jī)與錄音,去河邊找鬼坦敌。 笑死侣诵,一個(gè)胖子當(dāng)著我的面吹牛痢法,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杜顺,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼财搁,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了躬络?” 一聲冷哼從身側(cè)響起尖奔,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎穷当,沒想到半個(gè)月后提茁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡馁菜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年茴扁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汪疮。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡峭火,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出智嚷,到底是詐尸還是另有隱情卖丸,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布纤勒,位于F島的核電站坯苹,受9級(jí)特大地震影響隆檀,放射性物質(zhì)發(fā)生泄漏摇天。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一恐仑、第九天 我趴在偏房一處隱蔽的房頂上張望泉坐。 院中可真熱鬧,春花似錦裳仆、人聲如沸腕让。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纯丸。三九已至,卻和暖如春静袖,著一層夾襖步出監(jiān)牢的瞬間觉鼻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國打工队橙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坠陈,地道東北人萨惑。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像仇矾,于是被迫代替她去往敵國和親庸蔼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 詳情頁面 packagecom.example.shoppingcar; importandroid.conten...
    ForCrazyLove閱讀 562評(píng)論 0 2
  • 學(xué)習(xí)Android的同學(xué)注意了V啊=憬觥! 學(xué)習(xí)過程中遇到什么問題或者想獲取學(xué)習(xí)資源的話刻盐,歡迎加入Android學(xué)習(xí)交流...
    kingZXY2009閱讀 666評(píng)論 0 2
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,863評(píng)論 25 707
  • 當(dāng)我們?cè)趯懮坛茿pp時(shí)萍嬉,在購物車這個(gè)頁面中,會(huì)需要要將Listview中的所有物品一鍵選中隙疚,一起結(jié)算壤追,這時(shí)就要用到...
    走在路上從未回頭閱讀 835評(píng)論 0 5
  • 極度好戰(zhàn)又極度溫和極度黷武又極度愛美極度粗魯傲慢又極度彬彬有禮極度死板又極度靈活極度恭順又極度討厭被使喚極度忠誠又...
    George5961閱讀 584評(píng)論 0 0