當前位置:首頁 » 安卓系統 » android列表多選

android列表多選

發布時間: 2022-10-18 03:19:36

㈠ 如何通過ListView實現多選效果

一.無圖無真相

二.關鍵代碼
1.主布局 sample_main.xml(單選和多選切換,設置android:choiceMode,其他不變)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:showDividers="middle"
android:divider="?android:dividerHorizontal">

<TextView style="@style/Widget.DescriptionBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/intro_message" />

<!--
當 ListView 已設置 choiceMode 時,它將允許用戶"選擇"
一個或多個項目。該框架提供了默認列表項目布局,這顯示標准單選按鈕或復選框旁邊
單行文本:
《 android:choiceMode="singleChoice"》
R.layout.simple_list_item_single_choice 和
《 android:choiceMode="multipleChoice"》
R.layout.simple_list_item_multiple_choice。
應該設置 android: scrollbarStyle (顯示和隱藏)
android:scrollbarStyle="outsideInset"不顯示
android:scrollbarStyle="insideOverlay"顯示
-->
<ListView android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:paddingLeft="@dimen/page_margin"
android:paddingRight="@dimen/page_margin"
android:scrollbarStyle="outsideInset"
android:choiceMode="multipleChoice" /></LinearLayout>

2.item布局

<!--
從 sample_main.xml ListView 有 choiceMode 套,意思說當用戶
選擇列表項,列表視圖將設置為該項目的根視圖狀態
(此 CheckableLinearLayout)"檢查"。請注意,這需要查看
實現的介面。一旦選中根視圖,則任何item,
有 plicateParentState 屬性設置的將繼承此"選中"狀態.
--><com.example.android.customchoicelist.CheckableLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="8dp"
android:id="@+id/ll_contain"
android:paddingRight="8dp"
android:minHeight="?android:listPreferredItemHeight"
android:gravity="center_vertical">

<TextView android:id="@android:id/text1"
android:plicateParentState="true"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:textAppearance="?android:textAppearanceMedium"
android:textColor="@color/hideable_text_color" />

<ImageView android:src="@drawable/ic_hideable_item"
android:plicateParentState="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp" /></com.example.android.customchoicelist.CheckableLinearLayout>34

3.自定義單選和多選布局

package com.example.android.customchoicelist;import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.view.View;import android.widget.Checkable;import android.widget.LinearLayout;/**
*自定義單選和多選布局
*/public class CheckableLinearLayout extends LinearLayout implements Checkable {
private static final int[] CHECKED_STATE_SET = {android.R.attr.state_checked}; private boolean mChecked = false; public CheckableLinearLayout(Context context, AttributeSet attrs) { super(context, attrs);
} //返回選中的狀態
public boolean isChecked() { return mChecked;
} //設置選中的狀態
public void setChecked(boolean b) { if (b != mChecked) {
mChecked = b;
refreshDrawableState();
}
} //選擇開關
public void toggle() {
setChecked(!mChecked);
} //添加選中的條目狀態
@Override
public int[] onCreateDrawableState(int extraSpace) { final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); if (isChecked()) {
mergeDrawableStates(drawableState, CHECKED_STATE_SET);
} return drawableState;
}
}343536373839404142434445

4.主要代碼MainActivity.java

package com.example.android.customchoicelist;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;/**
*如何創建自定義的單或多選擇
* @author 孤狼
* @since 2015-8-3
*/public class MainActivity extends Activity {
ListView listView; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.sample_main);
listView =(ListView)findViewById(R.id.listview);
listView.setAdapter(new MyAdapter());
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //獲取條目
CheckableLinearLayout linearLayout = (CheckableLinearLayout) view.findViewById(R.id.ll_contain); if (linearLayout.isChecked()) {
Log.e("選中true", position + "");
} else {
Log.e("未選中false", position + "");
} /**對於多選,建議創建集合,用於封裝用戶選中的條目position,存入時判定 用戶來回切換的狀態*/
}
});
} /**
* A simple array adapter that creates a list of cheeses.
*/
private class MyAdapter extends BaseAdapter {
@Override
public int getCount() { return Cheeses.CHEESES.length;
} @Override
public String getItem(int position) { return Cheeses.CHEESES[position];
} @Override
public long getItemId(int position) { return Cheeses.CHEESES[position].hashCode();
} @Override
public View getView(int position, View convertView, ViewGroup container) { if (convertView == null) {
convertView = getLayoutInflater().inflate(R.layout.list_item, container, false);
}
((TextView) convertView.findViewById(android.R.id.text1))
.setText(getItem(position)); return convertView;
}
}
}3435363738394

三.說明
通篇沒有多餘的廢話,不浪費大家的寶貴時間,代碼簡潔,主要部分都有注釋,實際開發中的需求,需要牛牛們自己自定義,發揮,如有疑問,請留言—-孤狼

四.示例源碼(由於孤狼使用的是Android studio開發,暫時沒有eclipse版)

㈡ android中listview多選後,並獲得選中的多個item的具體值的方法是什麼

最笨的方法,可以給每個item加一個boolean選中了設成true,然後再遍歷

㈢ 如何實現自定義列表的多個item,的單選或多選

自定義ListView item中包含一個textview 和checkbox,checkbox選中級別高於item,故在xml中進行屏蔽

單選方法:(該方法同樣適用於radiobutton)

main.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="match_parent"
android:orientation="vertical"
>
<ImageView
android:id="@+id/img"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:src="@drawable/triangle16blue"/>

<ListView
android:id="@+id/lvGroup"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/downbutton_corner"/>

</LinearLayout><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >

<TextView
android:id="@+id/item_tv"
android:textSize="18sp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_vertical" />
<CheckBox
android:id="@+id/item_cb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:clickable="false"
android:focusableInTouchMode="false"
android:gravity="center_vertical"/>

</LinearLayout>MainActivity.java

public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
private ListView listView;
private ArrayList<String> groups;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView) this.findViewById(R.id.list);
groups = new ArrayList<String>();
groups.add("11");
groups.add("22");
groups.add("33");
groups.add("44");
groups.add("55");
groups.add("66");
groups.add("77");
GroupAdapter adapter = new GroupAdapter(this,groups);
listView.setAdapter(adapter);
listView.setOnItemClickListener(listItemClickListener);
OnItemClickListener listItemClickListener=new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
//// 取得ViewHolder對象,這樣就省去了通過層層的findViewById去實例化我們需要的cb實例的步驟
ViewHolder viewHolder=(ViewHolder)view.getTag();
viewHolder.cb.toggle();// 把CheckBox的選中狀態改為當前狀態的反,gridview確保是單一選中
}
};
}
}
}

GroupAdapter.java

public class GroupAdapter extends BaseAdapter {
private Activity activity;//上下文
private ArrayList<String> list;

private LayoutInflater inflater=null;//導入布局
private int temp=-1;

public GroupAdapter(Activity context, ArrayList<String> list) {
this.activity = context;
this.list = list;
inflater=LayoutInflater.from(context);

}

@Override
public int getCount() {
return list.size();
}

@Override
public Object getItem(int position) {

return list.get(position);
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
//listview每顯示一行數據,該函數就執行一次
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder=null;
if (convertView==null) {//當第一次載入ListView控制項時 convertView為空
convertView=inflater.inflate(R.layout.group_item_view, null);//所以當ListView控制項沒有滑動時都會執行這條語句
holder=new ViewHolder();
holder.tv=(TextView)convertView.findViewById(R.id.item_tv);
holder.cb=(CheckBox)convertView.findViewById(R.id.item_cb);
convertView.setTag(holder);//為view設置標簽

}
else{//取出holder
holder=(ViewHolder) convertView.getTag();//the Object stored in this view as a tag
}
//設置list的textview顯示
holder.tv.setTextColor(Color.WHITE);
holder.tv.setText(list.get(position));
// 根據isSelected來設置checkbox的選中狀況

holder.cb.setId(position);//對checkbox的id進行重新設置為當前的position
holder.cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
//把上次被選中的checkbox設為false
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){//實現checkbox的單選功能,同樣適用於radiobutton
if(temp!=-1){
//找到上次點擊的checkbox,並把它設置為false,對重新選擇時可以將以前的關掉
CheckBox tempCheckBox=(CheckBox)activity.findViewById(temp);
if(tempCheckBox!=null)
tempCheckBox.setChecked(false);
}
temp=buttonView.getId();//保存當前選中的checkbox的id值
}
}
});
//System.out.println("temp:"+temp);
//System.out.println("position:"+position);
if(position==temp)//比對position和當前的temp是否一致
holder.cb.setChecked(true);
else
holder.cb.setChecked(false);
return convertView;
}
static class ViewHolder {
TextView tv;
CheckBox cb;
}
}

listview checkbox實現多選框
MainAcitvity.java

public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
private ListView listView;
private ArrayList<String> groups;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView) this.findViewById(R.id.list);
groups = new ArrayList<String>();
groups.add("11");
groups.add("22");
groups.add("33");
groups.add("44");
groups.add("55");
groups.add("66");
groups.add("77");
GroupAdapter adapter = new GroupAdapter(this,groups);
listView.setAdapter(adapter);
listView.setOnItemClickListener(listItemClickListener);
OnItemClickListener listItemClickListener=new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
//// 取得ViewHolder對象,這樣就省去了通過層層的findViewById去實例化我們需要的cb實例的步驟
ViewHolder viewHolder=(ViewHolder)view.getTag();
viewHolder.cb.toggle();// 把CheckBox的選中狀態改為當前狀態的反,gridview確保是單一選中
GroupAdapter.getIsSelected().put(position, viewHolder.cb.isChecked());//將CheckBox的選中狀況記錄下來
}
};
}
}
GroupAdapter.java

public class GroupAdapter extends BaseAdapter {
private Context context;//上下文
private ArrayList<String> list;
//控制CheckBox選中情況
private static HashMap<Integer,Boolean> isSelected;
private LayoutInflater inflater=null;//導入布局

public GroupAdapter(Context context, ArrayList<String> list) {
this.context = context;
this.list = list;
inflater=LayoutInflater.from(context);
isSelected=new HashMap<Integer, Boolean>();
initData();
}
private void initData(){//初始化isSelected的數據
for(int i=0;i<list.size();i++){
getIsSelected().put(i,false);

}
}

@Override
public int getCount() {
return list.size();
}

@Override
public Object getItem(int position) {

return list.get(position);
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
//listview每顯示一行數據,該函數就執行一次
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder=null;
if (convertView==null) {//當第一次載入ListView控制項時 convertView為空
convertView=inflater.inflate(R.layout.group_item_view, null);//所以當ListView控制項沒有滑動時都會執行這條語句
holder=new ViewHolder();
holder.tv=(TextView)convertView.findViewById(R.id.item_tv);
holder.cb=(CheckBox)convertView.findViewById(R.id.item_cb);
convertView.setTag(holder);//為view設置標簽

}
else{//取出holder
holder=(ViewHolder) convertView.getTag();//the Object stored in this view as a tag
}
//設置list的textview顯示
holder.tv.setTextColor(Color.WHITE);
holder.tv.setText(list.get(position));
// 根據isSelected來設置checkbox的選中狀況
holder.cb.setChecked(getIsSelected().get(position));
return convertView;
}
static class ViewHolder {
TextView tv;
CheckBox cb;
}
public static HashMap<Integer, Boolean>getIsSelected(){
return isSelected;
}
public static void setIsSelected(HashMap<Integer, Boolean> isSelected){
GroupAdapter.isSelected=isSelected;
}

}其中,getview負責顯示每一行listview item,每顯示一行就執行一次getview,

若要單選,必須保存當前選中的checkbox的position值,與listview 的每一個item的position進行比較,相同時才設置checkbox ischeck=true;

只有checkbox的setOnCheckChangeListener可以做到這點,保存上一次點擊的position值,對checkbox的id值重新設置.temp保存該id值.

getview負責顯示數據,onitemselectedlistener負責發送消息,提取數據,處理數據

㈣ android listview兩種布局,一種單選一種多選,怎樣獲得選中狀態,並存入資料庫

setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); // 多選
setChoiceMode(ListView.CHOICE_MODE_SINGLE) // 單選

選擇後的效果是要子view支持才可以的。需要checkable的子view才可以,如果你是普通的textview之類的。。可能選中和不選中效果是一樣的。
至於寫入資料庫,android上用sqlite。。。

㈤ 關於Android彈出多選列表框的問題,高手快進來

這個很簡單吧

  1. 你要做的是一個寫一個xml,將彈出框的ListView布局畫好

  2. 創建Adapter 就是這個列表的適配器,在這個適配器里記錄checkBox 的狀態(選中和未選中)

  3. 用布局填充器,將這個xml創建出來,並給這個listView應用適配器

  4. 創建一個AlertDialog 並setView 將這個創建出來的View應用到彈出框

  5. 給AlertDialog 注冊兩個事件確定和取消按鈕,

  6. 確定時,從Adapter 中取出選中的值

代碼實現起來有點多,自己多動手吧,一點都不難,而且你還可以封裝成一個標準的工具

㈥ android中如何在Listview中改變成多選模式

不清楚你是不是這個意思,就是想給ListView加上多選的設置,可以同時選幾個條目,我是這樣做得布局還是第一個的布局,只要給ListView設置一下,
mListView.setChoiceMod(ListView.CHOICE_MODE_MULTIPLE_MODAL);
mListView.setMultiChoiceModeListener(mListener);
/**
* 列表監聽器
*/
private MultiChoiceModeListener mListener = new MultiChoiceModeListener() {

/**
* ActionMode創建之前所做的初始化工作
*/
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return true;
}
/**
* ActionMode使用後的銷毀工作
*/
@Override
public void onDestroyActionMode(ActionMode mode) {
}
/**
* 創建ActionMode,菜單項載入
*/
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.action_menu, menu);
Log.e(MainActivity.TAG, "onCreateActionMode");
return true;
}
/**
* 點擊ActionMode選項後觸發事件
*/
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return true;
}
/**
* 做一些當選中項目/取消項目的記錄工作
*/
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position,
long id, boolean checked) {
}
};
就可以了,這里我做的是ActionMode,正好實現了這個功能,不知道能不能幫到你

㈦ android的Listview多選問題!!根據第一個Listview選中的項,傳到另一個Listview中,相同項默認選中!

litview.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
Message message = new Message();
message.what = 1;
message.arg1 = arg2;
handler.sendMessage(message);
}

public Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
litview.setItemChecked((msg.arg1), true);
break;
}
super.handleMessage(msg);
}
};

onItemClick中的arg2不就是這一項在列表中的位置么?你可以發個消息設置listView。
如果沒有用自定義適配器。要設置另外一個LISTview的話,需要循環一下,第一個列表選擇的項,在第二個列表的位置。再來設置。
不過我建議你還是自定義一個適配器。

安卓系統資源管理器中的有一個選項叫多選,請問要如何使用才能一次性連續選中多個項目。

先點一下多選,然後再一個個點需要選中的項目。
例:文件123。
選中多選後
點1、再點2、再點3.
然後再按menu或者點菜單等選擇復制、剪切等操作。就可以多文件操作了。

㈨ expandablelistview可展開的列表組件怎麼實現多選

ExpandableListView額外支持的xml屬性

編寫布局文件
<?xml
version="1.0" encoding="utf-8"?><LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"><ExpandableListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/elv1"></ExpandableListView></LinearLayout>

建立數組,用於列表展示

創建私有方法,用於各級列表項的顯示

擴展BaseExpandableListAdapter來實現ExpandableListAdapter
關鍵是實現getGroupView(),getChildView()兩方法

完整代碼及部分說明

效果圖

熱點內容
tomcat配置ip地址訪問 發布:2025-03-10 14:54:54 瀏覽:689
注冊淘寶密碼多少 發布:2025-03-10 14:49:03 瀏覽:558
文件上傳設備 發布:2025-03-10 14:47:47 瀏覽:498
江西l2tp伺服器託管雲伺服器 發布:2025-03-10 14:47:38 瀏覽:885
微信如何給錢包設置手勢密碼 發布:2025-03-10 14:46:55 瀏覽:229
江蘇伺服器如何 發布:2025-03-10 14:46:17 瀏覽:179
可編程交直流電源 發布:2025-03-10 14:40:19 瀏覽:569
c語言編程軟體安裝教程 發布:2025-03-10 14:20:01 瀏覽:85
java判斷變數類型 發布:2025-03-10 14:19:50 瀏覽:578
讀寫存儲器解釋 發布:2025-03-10 14:04:22 瀏覽:93