A. android listview兩種布局,一種單選一種多選,怎樣獲得選中狀態,並存入資料庫
setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); // 多選
setChoiceMode(ListView.CHOICE_MODE_SINGLE) // 單選
選擇後的效果是要子view支持才可以的。需要checkable的子view才可以,如果你是普通的textview之類的。。可能選中和不選中效果是一樣的。
至於寫入資料庫,android上用sqlite。。。
B. android listview中的點擊時間 點擊後 android:visibility="gone"變為visible 單選和多選兩種情況
tvFileNameAndSize.setText(attachFile.getFileName()+"("+attachFile.getSize()+"K)");/*將文件名與文件大小添加到顯示里*/
v.setTag(attachFile);/*將文件保存到控制項里*/
ImageViewivDelete=(ImageView)v.findViewById(R.id.iv_iccfa_del);
ivDelete.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
Viewparent=(View)v.getParent();/*得到焦點*/
AttachFilefile=(AttachFile)parent.getTag();/*將導入到這個位置的文件導出來*/
mFiles.remove(file);/*從自己的集合里移除它*/
mLlAttachFile.removeView(parent);/*從控制項里將這個焦點所對應的內容刪除*/
}
});
mLlAttachFile.addView(v);
ListView顯示的格式是一個TextView加上一個ImageView,這個就是點擊那個ImageView時刪除這一條記錄的部分代碼,
C. 在android中按鈕共分為幾種
從控制項來說分為2種:button(一般按鈕)和ImageButton(圖片按鈕);
但是大部分時候,開發者是可以通過各種方式自定義按鈕,這樣的話,界面呈現出來的按鈕是多種多樣的;
TextView,view等等,很多控制項其實都可以拿來當按鈕使用;
此外,還有包括ToggleButton,單選按鈕,多選按鈕等這些都屬於是功能比較專一的特殊按鈕了;
我想你只有對android比較了解的情況下,才可能理解深一些吧!
D. 寫了一個小的android demo,從系統相冊去選取圖片,發現只能單選,問下大神,有沒有方式可以多選的
系統相冊(Gallery widget)預設情況下,並不支持一次多選圖片功能。
你可以擴展Gallery View 組件,在每個圖片旁放一個CheckBox,這樣就可以實現多選了,稍微麻煩了一些.
你可以在谷歌搜索中輸入:Android custom image gallery with checkbox in grid to select multiple
就找到相應的方法。
Good Luck!
E. 如何實現自定義列表的多個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負責發送消息,提取數據,處理數據
F. 安卓編程如何在點擊確定按鈕時把多選框跟單選框的內容用提示框顯示出來
寫一個提示框類繼承dialog ,
在oncreate()方法下 加入 this.setContentView(R.layout.dialog_reject);
R.layout.dialog_reject.xml就是提示框的布局文件,布局文件里加入你的多選框和單選框,這樣就可以了。這是自定義dialog ,使用方法和dialog一樣。 題主可能習慣使用AlertDialog , 直接用系統的AlertDialog 雖然方便,但功能和樣式受限制,所以一般工作中都會使用自定義的dialog。
G. 如何通過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版)
H. 如何實現android中三個單選按鈕橫向排列且只能選一個
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/row_item_margin">
<TextView
android:id="@+id/tvStorageWay"
style="@style/EditTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="儲存方式:"/>
<RadioGroup
android:id="@+id/rgStorageWay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@id/tvStorageWay"
android:gravity="center_vertical"
android:orientation="horizontal">
<RadioButton
android:id="@+id/rbPack"
style="@style/EditTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="@null"
android:drawableLeft="@drawable/selector_login_mode_radiobutton"
android:text="包裝"/>
<RadioButton
android:id="@+id/rbBulk"
style="@style/EditTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/row_item_margin"
android:layout_weight="1"
android:button="@null"
android:drawableLeft="@drawable/selector_login_mode_radiobutton"
android:text="散裝"/>
<RadioButton
android:id="@+id/rbStorageWayOther"
style="@style/EditTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/row_item_margin"
android:layout_weight="1"
android:button="@null"
android:drawableLeft="@drawable/selector_login_mode_radiobutton"
android:text="其它"/>
</RadioGroup>
</RelativeLayout>
I. android怎麼讓listview的checkbox單選
還是先來看看是不是你想要的效果:
不廢話,直接上代碼,很簡單,代碼里都有注釋
單選
public class SingleActivity extends AppCompatActivity {
private ListView listView;
private ArrayList<String> groups;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_single);
listView = (ListView) this.findViewById(R.id.lvGroup);
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");
AdapterView.OnItemClickListener listItemClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// 取得ViewHolder對象,這樣就省去了通過層層的findViewById去實例化我們需要的cb實例的步驟
SingleAdapter.ViewHolder viewHolder = (SingleAdapter.ViewHolder) view.getTag();
viewHolder.cb.toggle();// 把CheckBox的選中狀態改為當前狀態的反,gridview確保是單一選中
}
};
SingleAdapter adapter = new SingleAdapter(this, groups);
listView.setAdapter(adapter);
listView.setOnItemClickListener(listItemClickListener);
}
}
Adapter:
public class SingleAdapter extends BaseAdapter {
private Activity activity;//上下文
private ArrayList<String> list;
private LayoutInflater inflater = null;//導入布局
private int temp = -1;
public SingleAdapter(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) {
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();
}
//設置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 CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
if (isChecked) {//實現checkbox的單選功能,同樣適用於radiobutton
if (temp != -1) {
//找到上次點擊的checkbox,並把它設置為false,對重新選擇時可以將以前的關掉
CheckBox tempCheckBox = (CheckBox) activity.findViewById(temp);
if (tempCheckBox != null)
tempCheckBox.setChecked(false);
}
temp = compoundButton.getId();//保存當前選中的checkbox的id值
}
}
});
if (position == temp)//比對position和當前的temp是否一致
holder.cb.setChecked(true);
else
holder.cb.setChecked(false);
return convertView;
}
public static class ViewHolder {
TextView tv;
CheckBox cb;
}
}
多選:
public class MulActivity extends AppCompatActivity {
private ListView listView;
private ArrayList<String> groups;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mul);
listView = (ListView) this.findViewById(R.id.list);
groups = new ArrayList<>();
groups.add("11");
groups.add("22");
groups.add("33");
groups.add("44");
groups.add("55");
groups.add("66");
groups.add("77");
AdapterView.OnItemClickListener listItemClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// 取得ViewHolder對象,這樣就省去了通過層層的findViewById去實例化我們需要的cb實例的步驟
MulAdapter.ViewHolder viewHolder = (MulAdapter.ViewHolder) view.getTag();
viewHolder.cb.toggle();// 把CheckBox的選中狀態改為當前狀態的反,gridview確保是單一選中
MulAdapter.getIsSelected().put(position, viewHolder.cb.isChecked());//將CheckBox的選中狀況記錄下來
}
};
MulAdapter adapter = new MulAdapter(this, groups);
listView.setAdapter(adapter);
listView.setOnItemClickListener(listItemClickListener);
}
}
Adapter:
public class MulAdapter extends BaseAdapter {
private Context context;//上下文
private ArrayList<String> list;
//控制CheckBox選中情況
private static HashMap<Integer, Boolean> isSelected;
private LayoutInflater inflater = null;//導入布局
public MulAdapter(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) {
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;
}
public static class ViewHolder {
TextView tv;
CheckBox cb;
}
public static HashMap<Integer, Boolean> getIsSelected() {
return isSelected;
}
public static void setIsSelected(HashMap<Integer, Boolean> isSelected) {
MulAdapter.isSelected = isSelected;
}
}
以上所述是給介紹的Android中ListView + CheckBox實現單選、多選效果
J. android中的checkBox如何實現單選
Android中checkbox默認為復選框,也就是多選,實現單選的話,可以讓checkbox添加監聽,當已經有一個點擊了,點擊另外一個的時候,修改默認的狀態,實現單選,示例如下:
publicstaticinttemp=-1;
checkBox=(CheckBox)parentView.findViewById(R.id.cbox_isselect);
//做個標記
checkBox.setId(groupPosition);
//checkbox監聽
checkBox.setOnCheckedChangeListener(newOnCheckedChangeListener(){
@Override
publicvoidonCheckedChanged(CompoundButtonbuttonView,booleanisChecked){
if(isChecked)
{
//這段代碼來實現單選功能
if(temp!=-1)
{
CheckBoxtempButton=(CheckBox)MyRingBoxActivity.this.findViewById(temp);
if(tempButton!=null)
{
tempButton.setChecked(false);
}
}
//得到當前的position
temp=buttonView.getId();
}else{
temp=-1;
}
}
});