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

當我們在寫商城App時,在購物車這個頁面中,會需要要將Listview中的所有物品一鍵選中,一起結(jié)算,這時就要用到Listview的一鍵點擊Item全部選中的功能了

? ? ? ?我寫的是一個簡單的Demo ? ? ?只有一個類,一個Adapter而已 ?所以比較適用于初學android 的來看。

下面這個是主頁面的布局文件

<?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準備數(shù)據(jù)

initDate();

// 實例化自定義的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進行刷新? 并將這個方法進行抽取

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對象,這樣就省去了通過層層的findViewById去實例化我們需要的cb實例的步驟

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

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

holder.cb.toggle();

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

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

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

if(holder.cb.isChecked()){

checkNum++;

}else{

checkNum--;

}

// 用TextView顯示

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

}

});

}

private voiddatachanged() {

// 通知listView刷新

mAdapter.notifyDataSetChanged();

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

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

}

}



接下來是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;

// 用來控制CheckBox的選中狀況

private staticHashMapisSelected;

// 上下文

privateContextmContext;

// 用來導入布局

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對象

holder =newViewHolder();

// 導入布局并賦值給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設置標簽

convertView.setTag(holder);

}else{

// 取出holder

holder = (ViewHolder) convertView.getTag();

}

// 設置list中TextView的顯示

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

// 根據(jù)isSelected來設置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? 一起交流學習? 本人正在向乞討在路上奔走中

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容