安卓從入門到乞討 List View一鍵點(diǎn)擊Item全選中的實(shí)現(xiàn)

當(dāng)我們?cè)趯懮坛茿pp時(shí),在購(gòu)物車這個(gè)頁(yè)面中逐样,會(huì)需要要將Listview中的所有物品一鍵選中蜗字,一起結(jié)算,這時(shí)就要用到Listview的一鍵點(diǎn)擊Item全部選中的功能了

? ? ? ?我寫的是一個(gè)簡(jiǎn)單的Demo ? ? ?只有一個(gè)類脂新,一個(gè)Adapter而已 ?所以比較適用于初學(xué)android 的來(lái)看挪捕。

下面這個(gè)是主頁(yè)面的布局文件

<?xml version="1.0"encoding="utf-8"?>

<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="horizontal">

android:id="@+id/tv"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_gravity="center_vertical"/>

android:id="@+id/line"

android:layout_width="fill_parent"

android:layout_height="50dp"

android:layout_below="@+id/tv"

android:orientation="horizontal">

android:id="@+id/bt_selectall"

android:layout_width="80dp"

android:layout_height="fill_parent"

android:text="全選"/>

android:id="@+id/bt_cancleselectall"

android:layout_width="80dp"

android:layout_height="fill_parent"

android:text="反選"/>

android:id="@+id/bt_deselectall"

android:layout_width="80dp"

android:layout_height="fill_parent"

android:text="取消選擇"/>

android:id="@+id/lv"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_below="@+id/line"/>

</RelativeLayout>


Listview中Item的布局文件



<?xml version="1.0"encoding="utf-8"?>

<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="horizontal">

android:id="@+id/item_tv"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_gravity="center_vertical"

android:layout_weight="1"/>

android:id="@+id/item_cb"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:clickable="false"

android:focusable="false"

android:focusableInTouchMode="false"

android:gravity="center_vertical"/>

</LinearLayout>


下面這些就是核心代碼了 ? ? ? ? ? ? 基本上本人都 有做一些注釋的 ? ? ? 有不明白可以看注釋


packagesmile.itheima.com.listviewitemallcheck;

importandroid.os.Bundle;

importandroid.support.v7.app.AppCompatActivity;

importandroid.view.View;

importandroid.widget.AdapterView;

importandroid.widget.Button;

importandroid.widget.LinearLayout;

importandroid.widget.ListView;

importandroid.widget.TextView;

importjava.util.ArrayList;

importbutterknife.BindView;

importbutterknife.ButterKnife;

importbutterknife.OnClick;

public classMainActivityextendsAppCompatActivity {

@BindView(R.id.tv)

TextViewmTv;

@BindView(R.id.line)

LinearLayoutmLine;

@BindView(R.id.bt_selectall)

ButtonmBtSelectall;

@BindView(R.id.bt_cancleselectall)

ButtonmBtCancleselectall;

@BindView(R.id.bt_deselectall)

ButtonmBtDeselectall;

@BindView(R.id.lv)

ListViewmLv;

private intcheckNum;// 記錄選中的條目數(shù)量

privateTextViewtv_show;// 用于顯示選中的條目數(shù)量

privateMyAdaptermAdapter;

privateArrayListmList;

@Override

protected voidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ButterKnife.bind(this);

// 為Adapter準(zhǔn)備數(shù)據(jù)

initDate();

// 實(shí)例化自定義的MyAdapter

mAdapter=newMyAdapter(mList,this);

// 綁定Adapter

mLv.setAdapter(mAdapter);

}

//初始化數(shù)據(jù)

private voidinitDate() {

mList=newArrayList<>();

for(inti =0; i <15; i++) {

mList.add("data"+ i);

}

}

@OnClick({R.id.bt_selectall, R.id.bt_cancleselectall, R.id.bt_deselectall})

public voidonClick(View view) {

switch(view.getId()) {

caseR.id.bt_selectall:

//全選中

mBtSelectall.setOnClickListener(newView.OnClickListener() {

@Override

public voidonClick(View view) {

for(inti =0; i

MyAdapter.getIsSelected().put(i,true);

}

checkNum=mList.size();

//通知ListView進(jìn)行刷新? 并將這個(gè)方法進(jìn)行抽取

datachanged();

}

});

break;

caseR.id.bt_cancleselectall:

//反選

mBtCancleselectall.setOnClickListener(newView.OnClickListener() {

@Override

public voidonClick(View view) {

for(inti =0; i

if(MyAdapter.getIsSelected().get(i)){

MyAdapter.getIsSelected().put(i,false);

checkNum--;

}else{

MyAdapter.getIsSelected().put(i,true);

checkNum++;

}

}

datachanged();

}

});

break;

caseR.id.bt_deselectall:

//取消選擇

mBtDeselectall.setOnClickListener(newView.OnClickListener() {

@Override

public voidonClick(View view) {

for(inti =0; i

if(MyAdapter.getIsSelected().get(i)){

MyAdapter.getIsSelected().put(i,false);

checkNum--;

}

}

datachanged();

}

});

break;

}

mLv.setOnItemClickListener(newAdapterView.OnItemClickListener() {

@Override

public voidonItemClick(AdapterView adapterView, View view,inti,longl) {

// 取得ViewHolder對(duì)象,這樣就省去了通過(guò)層層的findViewById去實(shí)例化我們需要的cb實(shí)例的步驟

MyAdapter.ViewHolder holder= (MyAdapter.ViewHolder) view.getTag();

// 改變CheckBox的狀態(tài)

holder.cb.toggle();

//將checkBox的狀態(tài)記錄下來(lái)

MyAdapter.getIsSelected().put(i, holder.cb.isChecked());

//調(diào)整選中的條目

if(holder.cb.isChecked()){

checkNum++;

}else{

checkNum--;

}

// 用TextView顯示

//? tv_show.setText("已選中" + checkNum + "項(xiàng)");

}

});

}

private voiddatachanged() {

// 通知listView刷新

mAdapter.notifyDataSetChanged();

// TextView顯示最新的選中數(shù)目

// tv_show.setText("已選中" + checkNum + "項(xiàng)");

}

}



接下來(lái)是Adapter的書寫了


packagesmile.itheima.com.listviewitemallcheck;

importandroid.content.Context;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.ViewGroup;

importandroid.widget.BaseAdapter;

importandroid.widget.CheckBox;

importandroid.widget.TextView;

importjava.util.ArrayList;

importjava.util.HashMap;

/**

* Created by albus on 2017/3/10.

*/

public classMyAdapterextendsBaseAdapter {

// 填充數(shù)據(jù)的list

privateArrayListmList;

// 用來(lái)控制CheckBox的選中狀況

private staticHashMapisSelected;

// 上下文

privateContextmContext;

// 用來(lái)導(dǎo)入布局

privateLayoutInflaterinflater=null;

publicMyAdapter(ArrayList list, Context context) {

mList= list;

mContext= context;

inflater= LayoutInflater.from(context);

isSelected=newHashMap();

// 初始化數(shù)據(jù)

initDate();

}

// 初始化isSelected的數(shù)據(jù)

private voidinitDate() {

//初始化所有Item的選中狀態(tài)? ? ? ? 初始狀態(tài)全部為false? 未選中狀態(tài)

for(inti =0; i

getIsSelected().put(i,false);

}

}

@Override

public intgetCount() {

returnmList.size();

}

@Override

publicObject getItem(inti) {

returnmList.get(i);

}

@Override

public longgetItemId(inti) {

returni;

}

@Override

publicView getView(inti, View convertView, ViewGroup viewGroup) {

ViewHolder holder =null;

if(convertView ==null) {

// 獲得ViewHolder對(duì)象

holder =newViewHolder();

// 導(dǎo)入布局并賦值給convertview

convertView =inflater.inflate(R.layout.listview_item,null);

holder.tv= (TextView) convertView.findViewById(R.id.item_tv);

holder.cb= (CheckBox) convertView.findViewById(R.id.item_cb);

// 為view設(shè)置標(biāo)簽

convertView.setTag(holder);

}else{

// 取出holder

holder = (ViewHolder) convertView.getTag();

}

// 設(shè)置list中TextView的顯示

holder.tv.setText(mList.get(i));

// 根據(jù)isSelected來(lái)設(shè)置checkbox的選中狀況

holder.cb.setChecked(getIsSelected().get(i));

returnconvertView;

}

public staticHashMap getIsSelected() {

returnisSelected;

}

public static voidsetIsSelected(HashMap isSelected) {

MyAdapter.isSelected= isSelected;

}

public static classViewHolder {

TextViewtv;

CheckBoxcb;

}

}


有不懂的歡迎加QQ740894123? 一起交流學(xué)習(xí)? 本人正在向乞討在路上奔走中

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末争便,一起剝皮案震驚了整個(gè)濱河市级零,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌滞乙,老刑警劉巖奏纪,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異酷宵,居然都是意外死亡亥贸,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門浇垦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)炕置,“玉大人,你說(shuō)我怎么就攤上這事男韧∑犹” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵此虑,是天一觀的道長(zhǎng)甚纲。 經(jīng)常有香客問我,道長(zhǎng)朦前,這世上最難降的妖魔是什么介杆? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任鹃操,我火速辦了婚禮,結(jié)果婚禮上春哨,老公的妹妹穿的比我還像新娘荆隘。我一直安慰自己,他們只是感情好赴背,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布椰拒。 她就那樣靜靜地躺著,像睡著了一般凰荚。 火紅的嫁衣襯著肌膚如雪燃观。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天便瑟,我揣著相機(jī)與錄音缆毁,去河邊找鬼。 笑死胳徽,一個(gè)胖子當(dāng)著我的面吹牛积锅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播养盗,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼缚陷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了往核?” 一聲冷哼從身側(cè)響起箫爷,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎聂儒,沒想到半個(gè)月后虎锚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衩婚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年窜护,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片非春。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡柱徙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出奇昙,到底是詐尸還是另有隱情护侮,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布储耐,位于F島的核電站羊初,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏什湘。R本人自食惡果不足惜长赞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一晦攒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧得哆,春花似錦勤家、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)热幔。三九已至乐设,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绎巨,已是汗流浹背近尚。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留场勤,地道東北人戈锻。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像和媳,于是被迫代替她去往敵國(guó)和親格遭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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

  • 這是谷歌官方給我們提供的一個(gè)兼容低版本安卓設(shè)備的軟件包留瞳,里面包囊了只有在安卓3.0以上可以使用的api拒迅。而view...
    Ten_Minutes閱讀 5,735評(píng)論 1 19
  • 想到視頻錄制,肯定又是運(yùn)用MediaRecorder她倘,這個(gè)類實(shí)在是方便璧微,但是好用的東西一定要慎重,畢竟沒有那么便宜...
    2c2z0閱讀 2,068評(píng)論 0 2
  • 首先描述下需求: 1硬梁、新增短信時(shí)前硫,進(jìn)來(lái)收件人是為空,顯示一行文字(提醒) 2荧止、從通訊錄選擇聯(lián)系人后屹电,回到短信編輯界...
    小學(xué)生寫代碼閱讀 628評(píng)論 0 0
  • github 地址:https://github.com/android-cjj/Android-Material...
    top_coder閱讀 1,280評(píng)論 0 1
  • 我叫苗苗,這是我最喜歡的名字罩息。因?yàn)樗A(yù)示著旺盛的生命力和無(wú)限的可能性嗤详。 苗苗出生在山東菏澤,80后一枚瓷炮。出生時(shí)我因...
    苗苗在故鄉(xiāng)閱讀 362評(píng)論 0 3