1. 程式人生 > >Android裡ListView裡面新增CheckBox實現多選。

Android裡ListView裡面新增CheckBox實現多選。

1. 我在網上找了很多關於這個方面的文章,因為現在Android裡的ListView基本上都用到了ViewHolder,用到了convertView。

2. 網上有的文章也有用到convertView的,只是資料多了CheckBox的選擇基本上是出錯的了。

3.我想過用Adapter裡面用Map<>來儲存CheckBox是否選擇。可是太麻煩了。我

4. 現在我用我的方法來做一個這樣的。資料和介面分離開,這才是最好的。

listView的item的xml檔案, item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <ImageView android:id="@+id/item_icon" android:layout_width="50dp" android:layout_height="50dp" android:background="#000" /> <LinearLayout
android:layout_width="0dp" android:layout_height="50dp" android:layout_marginLeft="10dp" android:layout_weight="1" android:gravity="center" android:orientation="vertical"> <TextView android:id="@+id/item_title" android:layout_width="match_parent" android:layout_height="wrap_content" android
:singleLine="true"android:textSize="20dp" /> <TextView android:id="@+id/item_info" android:layout_width="match_parent" android:layout_height="wrap_content" android:singleLine="true"android:textSize="16dp" /> </LinearLayout> <CheckBox android:id="@+id/item_cb" android:layout_width="wrap_content" android:layout_height="50dp" android:clickable="false" android:focusable="false" android:focusableInTouchMode="false" /> </LinearLayout>
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
    <ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
    </ListView>
</LinearLayout>
資料來源格式實現:Bean.java
public class Bean
{
    private Drawable drawable;
    private String title;
    private String info;
    private boolean isChcked;//多了這個屬性來儲存CheckBox的選擇狀態public Bean(Drawable drawable, String title, String info, boolean isChcked)
    {
        this.drawable = drawable;
        this.title = title;
        this.info = info;
        this.isChcked = isChcked;
    }

    public void setIsChcked(boolean isChcked)
    {
        this.isChcked = isChcked;
    }

    public boolean getIsChcked()
    {
        return isChcked;
    }

    public String getInfo()
    {
        return info;
    }

    public String getTitle()
    {
        return title;
    }

    public Drawable getDrawable()
    {
        return drawable;
    }
}

MainActivity.java

public class MainActivity extends AppCompatActivity
{
    private ListView lv;

    private BeanAdapter mAdapter;
    private List<Bean> mList;

    @Override
protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initData();

        lv = (ListView)findViewById(R.id.lv);
        mAdapter = new BeanAdapter(mList, this);
        lv.setAdapter(mAdapter);

        lv.setOnItemClickListener(new AdapterView.OnItemClickListener()
        {
            @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
            {
                ViewHolder viewHolder = (ViewHolder)view.getTag();
                if(viewHolder.cb.isChecked())       //true -> false
{
                    viewHolder.cb.setChecked(false);
                    mList.get(position).setIsChcked(false);//改變狀態並儲存下來
                }
                else
{
                    viewHolder.cb.setChecked(true);
                    mList.get(position).setIsChcked(true);
                }
            }
        });
    }

    private void initData()
    {
        mList = new ArrayList<Bean>();
        Bean bean;
        for(int i = 0; i < 70; i++)
        {
            bean = new Bean(getDrawable(R.drawable.float1), "title" + i, "info" + i, false);
            mList.add(bean);
        }
    }
}
原始碼地址:http://download.csdn.net/detail/u013792369/9091055

相關推薦

AndroidListView裡面新增CheckBox實現

1. 我在網上找了很多關於這個方面的文章,因為現在Android裡的ListView基本上都用到了ViewHolder,用到了convertView。 2. 網上有的文章也有用到convertView的,只是資料多了CheckBox的選擇基本上是出錯的了。 3.我想過用Ad

基於ListViewCheckBox實現和全記錄的功能

應用開發中經常會有從資料庫中讀取資料顯示,然後選中多條、全部記錄並且刪除的需求。在做定製系統聯絡人的時候也遇到這樣的需求,下面寫個簡單的通過ListView和CheckBox實現多選、全

ListView新增CheckBox,進行項選擇,全,反,完美無Bug

新手筆記: 最近做一個列表,實現批量選擇刪除功能,用到了ListView中新增的CheckBox,來進行多項選擇,全選,反選等。因為用到了ListView,故對新手來說,有很多坑。 1、由於ListView採用了Recycler,即重複利用convertView,所以用Ch

CSS+checkbox 實現按鈕 標籤

效果圖:         CSS: input[type="checkbox"] { position: absolute; clip: rect(0, 0, 0,

Android Demo之旅 ListView底部新增載入更按鈕實現資料分頁

在我們的實際專案中,資料應該說是很多的,我們的ListView不可能一下子把資料全部載入進來,我們可以當滾動條滾動到ListView的底部的時候,給一個更多的提示,當我們點選它即載入下一頁的資料,相當與我們的分頁效果,參考網上的東西,寫了一個小小的demo,並總結了一些知識

android UI進階之實現listviewcheckbox與記錄

 今天繼續和大家分享涉及到listview的內容。在很多時候,我們會用到listview和checkbox配合來提供給使用者一些選擇操作。比如在一個清單頁面,我們需要記錄使用者勾選了哪些條目。這個的實現並不太難,但是有很多朋友來問我如何實現,他們有遇到各種各樣的問

如何在AndroidListView中構建CheckBox和RadioButton列表(支援單的投票專案示例)

引言 我們在android的APP開發中有時候會碰到提供一個選項列表供使用者選擇的需求,如在投票型別的專案中,我們提供一些主題給使用者選擇,每個主題有若干選項,使用者對這些主題的選項進行選擇,然後提交。 本文以一個支援單選和多選投票專案為例,演示了在一個ListView中如何構建CheckBox列表和Ra

AndroidListview簡單的應用

建立一個xml檢視程式碼 <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.andr

ListView 實現/單

ListView自身帶了單選、多選模式,可通過listview.setChoiceMode來設定: listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);//開啟多選模式 listview.setChoiceMode(ListView.CHO

DataTable新增checkbox實現表格資料全,單(點

Datatables是一款jquery表格外掛。它是一個高度靈活的工具,可以將任何HTML表格新增高階的互動功能。 分頁,即時搜尋和排序 幾乎支援任何資料來源:DOM, javascript, Ajax 和 伺服器處理 支援不同主題 DataTables, j

Android跑馬燈特效之動態實現個文字同時一起滾動

       最近做直播專案,有個跑馬燈效果,剛開始用原生的TextView實現,給產品一看,果斷被否定了,於是自定義了一個MarqueeTextView可以自動獲得焦點,加入足夠多的文字的自己就跑動起來了,於是又拿給產品,說是有五個廣告文

android 在.xml裡面新增事件onclick屬性,報錯java.lang.IllegalStateException: Could not find method

每天隨時都在寫onclick方法,自己寫的發現一個問題,在xml中定義 看報錯資訊: java.lang.IllegalStateException: Could not find method onClickButton(View) in a parent or ancestor

安卓實現listview聯動效果且選項

   實現效果如圖,點選大洲進行第一個listview資料的重新整理且聯動第二個listview資料更新,正常第二個listview是單選,點選後進行資料重新整理,現在做的是資料多選最後點選確定按鈕進行資料提交 首先實現兩個listview聯動效果: 資料來源如下   "

AndroidListView分頁載入資料

當列表資料量大的時候我們一半都進行分頁,android裡分頁一半不同於PC端,第幾頁的方式,一般都是滑動到底部資料自帶載入,廢話不多數了直接看程式碼: ListActivity.java類: import java.util.ArrayList; import an

Android開發——ListView區域性重新整理的實現

0. 前言區域性重新整理,即只需要在資料發生變化時才去重新整理ListView中對應的Item,資料未發生變化時不會去重新整理ListView中對應的Item。對於getView()非常耗時的情況下將體

玩轉Android---UI篇---CheckBox按鈕)

原址:http://hualang.iteye.com/category/143855 多選按鈕CheckBox的可以實現多項選擇,我們可以現在佈局檔案中定義多選按鈕,然後對每一個多選按鈕進行事件監聽 setOnCheckedChangeListener,通過isC

RecyclerView巢狀CheckBox實現操作每條Item新增分割線

activity_main.xml的佈局:<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/

Android在設定裡面新增新功能的方法

1./usr/smdt/self6000/android/packages/apps/Settings/res/xml/device_info_settings.xml 中增加節點: <!-- Detailed build version-->        

AndroidListView動態新增、移除itemView

ListView是Android專案中經常用到的一個控制元件,Listview用於顯示資料,同時我們經常會遇到要給ListView新增或是移除itemView,所以,寫了一個小小的demo解決這個小問題。 activity_main.xml程式碼: <LinearLa

android動態設定配置項並隨機排布並實現

效果如下: 首先佈局是這樣的,只有一個自定義的控制元件的FlowLayout <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="h