如何实现自定义列表的多个item,的单选或多选 怎么实现CheckBoxList单选功能
\u5982\u4f55\u901a\u8fc7ListView\u5b9e\u73b0\u591a\u9009\u6548\u679c\u4e00.\u65e0\u56fe\u65e0\u771f\u76f8 \u4e8c.\u5173\u952e\u4ee3\u7801 1.\u4e3b\u5e03\u5c40 sample_main.xml\uff08\u5355\u9009\u548c\u591a\u9009\u5207\u6362\uff0c\u8bbe\u7f6eandroid:choiceMode\uff0c\u5176\u4ed6\u4e0d\u53d8\uff09
123456789101112131415161718192021222324252627282930313233
2.item\u5e03\u5c40
12345678910111213141516171819202122232425262728293031323334
3.\u81ea\u5b9a\u4e49\u5355\u9009\u548c\u591a\u9009\u5e03\u5c40
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;/***\u81ea\u5b9a\u4e49\u5355\u9009\u548c\u591a\u9009\u5e03\u5c40*/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);} //\u8fd4\u56de\u9009\u4e2d\u7684\u72b6\u6001public boolean isChecked() { return mChecked;} //\u8bbe\u7f6e\u9009\u4e2d\u7684\u72b6\u6001public void setChecked(boolean b) { if (b != mChecked) {mChecked = b;refreshDrawableState();}} //\u9009\u62e9\u5f00\u5173public void toggle() {setChecked(!mChecked);} //\u6dfb\u52a0\u9009\u4e2d\u7684\u6761\u76ee\u72b6\u6001@Overridepublic int[] onCreateDrawableState(int extraSpace) { final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); if (isChecked()) {mergeDrawableStates(drawableState, CHECKED_STATE_SET);} return drawableState;}}123456789101112131415161718192021222324252627282930313233343536373839404142434445
4.\u4e3b\u8981\u4ee3\u7801MainActivity.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;/***\u5982\u4f55\u521b\u5efa\u81ea\u5b9a\u4e49\u7684\u5355\u6216\u591a\u9009\u62e9* @author \u5b64\u72fc* @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() { @Overridepublic void onItemClick(AdapterView parent, View view, int position, long id) { //\u83b7\u53d6\u6761\u76eeCheckableLinearLayout linearLayout = (CheckableLinearLayout) view.findViewById(R.id.ll_contain); if (linearLayout.isChecked()) {Log.e("\u9009\u4e2dtrue", position + "");} else {Log.e("\u672a\u9009\u4e2dfalse", position + "");} /**\u5bf9\u4e8e\u591a\u9009\uff0c\u5efa\u8bae\u521b\u5efa\u96c6\u5408\uff0c\u7528\u4e8e\u5c01\u88c5\u7528\u6237\u9009\u4e2d\u7684\u6761\u76eeposition\uff0c\u5b58\u5165\u65f6\u5224\u5b9a \u7528\u6237\u6765\u56de\u5207\u6362\u7684\u72b6\u6001*/}});} /*** A simple array adapter that creates a list of cheeses.*/private class MyAdapter extends BaseAdapter {@Overridepublic int getCount() { return Cheeses.CHEESES.length;} @Overridepublic String getItem(int position) { return Cheeses.CHEESES[position];} @Overridepublic long getItemId(int position) { return Cheeses.CHEESES[position].hashCode();} @Overridepublic 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;}}}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
\u4e09.\u8bf4\u660e \u901a\u7bc7\u6ca1\u6709\u591a\u4f59\u7684\u5e9f\u8bdd\uff0c\u4e0d\u6d6a\u8d39\u5927\u5bb6\u7684\u5b9d\u8d35\u65f6\u95f4\uff0c\u4ee3\u7801\u7b80\u6d01\uff0c\u4e3b\u8981\u90e8\u5206\u90fd\u6709\u6ce8\u91ca\uff0c\u5b9e\u9645\u5f00\u53d1\u4e2d\u7684\u9700\u6c42\uff0c\u9700\u8981\u725b\u725b\u4eec\u81ea\u5df1\u81ea\u5b9a\u4e49\uff0c\u53d1\u6325\uff0c\u5982\u6709\u7591\u95ee\uff0c\u8bf7\u7559\u8a00\u2014-\u5b64\u72fc
\u56db.\u793a\u4f8b\u6e90\u7801\uff08\u7531\u4e8e\u5b64\u72fc\u4f7f\u7528\u7684\u662fAndroid studio\u5f00\u53d1\uff0c\u6682\u65f6\u6ca1\u6709eclipse\u7248\uff09
\u65b9\u6cd51\uff1a
1function CheckSelect()
2 {
3 var tb = document.getElementByIdx_x("ctl00_ContentPlaceHolder1_chkYear");
4
5 for(var i=0;i < tb.rows.length;i++)
6 {
7 var chk = tb.rows[i].firstChild.firstChild;
8 alert(chk == event.srcElement);
9 if(chk != event.srcElement)
10 { chk.checked = false;}
11 }
12 }
\u6b64\u65b9\u6cd5\u9002\u7528\u5728\u7ad6\u5411\u6392\u5217\u60c5\u51b5\u4e0b\u3002
单选方法:(该方法同样适用于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负责发送消息,提取数据,处理数据
CheckBox本为复选框,仍然可以当单选框用
自定义ListView item中包含一个textview 和checkbox,checkbox选中级别高于item,故在xml中进行屏蔽
单选方法:(该方法同样适用于radiobutton)
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns: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=
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确保是单一选中
}
};
}
}
}
绛旓細鐢╬ython璇█濡備綍缁欏垪琛ㄥ姩鎬佺殑璧嬪?1銆乸ython涓殑鍒楄〃璧嬪煎彲閫氳繃鍒囩墖瀹炵幇锛屽涓嬶細鐢╗2]缁欏垪琛╝璧嬪硷紝鍒楄〃浼氳嚜鍔ㄦ敼鍙樺ぇ灏忥紝骞朵笖涓嶄細鏂扮敓鎴愬垪琛紝鑰屾槸鍦ㄥ師鍦板潃涓婅繘琛屼慨鏀癸紝鎵浠ュ垪琛╞涔熶細鍙楀埌褰卞搷銆2銆佸彲浠ヤ娇鐢≒ython涓殑for寰幆杩涜鍒楄〃鐨璧嬪硷紝for寰幆鐨勬牸寮忎负锛歠oriterating_varinsequence锛歴tatements(s)瀵瑰簲...
绛旓細琛ㄥ垱寤猴紝鑷畾涔鏌ヨ锛岃嚜鍔ㄥ畬鎴愬拰鍐呰仈鏁版嵁杩囨护銆傚彧鏄偍鍙互鏈熷緟鐨勪竴浜涘熀鏈姛鑳姐傛棤璁烘偍鏄淇敼澶栭敭锛屾洿鏂版煇浜涙暟鎹繕鏄慨鏀硅Е鍙戝櫒锛屾垜浠兘鍙互甯埌鎮ㄣ傚巻鍙 鍜屾渶鍠滄鐨勬煡璇 鏈変竴涓偍鍙兘鎯宠鎵ц澶氭鐨勬煡璇紵鎯宠鍦ㄤ笂涓涓細璇濅腑鎵ц鐨勬煡璇㈢粨鏋滃悧锛熼氳繃瀛樺偍鏀惰棌鏌ヨ鎴栬闂互鍓嶉夋嫨鐨勬煡璇鍒楄〃鏉ヨВ鍐宠繖浜涢棶棰樸傛墽...
绛旓細闇姹傜鐞嗙郴缁燂紙oBridge锛夊姛鑳藉鑸 椤圭洰鍔熻兘鍒楄〃 闇姹傜鐞嗛渶姹傜鐞嗘敮鎸佺増鏈寲銆佹潯鐩寲 绠$悊鏂囨。鍜岄渶姹傛潯鐩紝鏀寔鑷畾涔闇姹傛祦绋嬨佹暟鎹潈闄愭帶鍒躲侀渶姹傚灞傛鍏宠仈銆侀渶姹傜敓鎴愬伐浣滀换鍔°佸缓绔嬮渶姹傝窡韪煩闃点佽嚜鍔ㄦ爣璁板彉鏇村奖鍝嶃佽嚜瀹氫箟鎶ヨ〃鏍峰紡锛屽彲杈撳嚭鍒癢ORD鍜孍XCEL锛屾敮鎸佺绾挎暟鎹氦鎹備骇鍝佺鐞嗕骇鍝佺鐞嗘敮鎸澶氫釜浜у搧闆嗕腑绠...
绛旓細3.杩涘叆XP绯荤粺妗岄潰銆4.鍦ㄦ闈笂鍗曞嚮榧犳爣鍙抽敭锛岄夋嫨鈥滃睘鎬р濓紝閫夋嫨鈥滄樉绀衡濋夐」鍗★紝鐐瑰嚮鈥滆嚜瀹氫箟妗岄潰鈥濋」锛屽嬀閫夆滄垜鐨勭數鑴戔濓紝閫夋嫨鈥滅‘瀹氣濋鍑恒5.杩斿洖妗岄潰锛屽彸閿崟鍑烩滄垜鐨勭數鑴戔濓紝閫夋嫨鈥滃睘鎬р濓紝閫夋嫨鈥滅‖浠垛濋夐」鍗★紝閫夋嫨鈥滆澶囩鐞嗗櫒鈥濓紝閲岄潰鏄绠楁満鎵鏈夌‖浠剁殑绠$悊绐楀彛锛屾涓墍鏈夊墠闈㈠嚭鐜伴粍鑹查棶鍙凤紜...
绛旓細* 鍙傛暟3:鑷畾涔鍑芥暟鍚嶇О*(4)澶囨敞:* testCustom:鑷畾涔夐獙璇佸嚱鏁** 娉ㄦ剰浜嬮」:*(1)楠岃瘉鎻愮ずdiv鐨刬d闇瑕佹寜鐓ч獙璇佹帶浠秈d鍊+"txt"褰㈠紡琛ㄧず*濡:楠岃瘉鎺т欢id涓簎sername,閭d箞鏄剧ず鎻愮ず淇℃伅鐨勪綅缃甶d涓簍xtusername銆*(2)褰撲娇鐢ㄦ帶浠堕獙璇佹椂,闇瑕佸鍔犳帶浠剁殑鑷畾涔夊睘鎬(璇﹁浣跨敤鑼冧緥)* descr墨ptor:楠岃瘉鎻忚堪绗鍒楄〃,涓棿鐢"|"...
绛旓細3銆佸湪鐣岄潰宸︾獥鏍间腑鐐归夆鑷畾涔鈥濇煡鐪嬪叾涓嬫湁鏃犳樉绀轰綘鎯宠瀹夎椹卞姩鐨勭‖浠讹紝濡傛樉鍗★紝鏃狅紝璇存槑璇ユ満涓婃病鏈夎纭欢锛屾垨璇ョ‖浠跺凡姣佸潖锛屾崲涓涓樉鍗★紱鏈夛紝鏄惧崱锛屽嬀閫夛紝鍦ㄤ腑绐楁牸鈥滅‖浠朵俊鎭濅笅鏄剧ず姝ょ‖浠惰澶囧悕绛夋儏鍐碉紝鎻愮ず椹卞姩鏄惁闇瑕佹洿鏂帮紝濡傛彁绀衡滄椹卞姩闇瑕佹洿鏂扳濇椂锛屽嬀閫夊彲閫夋嫨鐨勯┍鍔ㄧ増鏈紝鐐归夊彸涓嬭鈥...
绛旓細1銆佹病鏈夎蒋椹变絾鍚敤浜嗚蒋椹憋紝鍙皢杞┍绂佺敤銆傚紑鏈烘寜DEL杩汢IOS锛岄夋嫨锛歋TANDARD CMOS FEATURES DRIVE A 锛 璁剧疆涓 None DRIVE B 锛 璁剧疆涓 None 鎸塅10 淇濆瓨锛岃緭鍏モ淵鈥濆洖杞﹀嵆鍙 (xyz5819 鎰忓康鏃剁┖)2銆佸唴瀛樻湁闂 鎴栬匔PU棰戠巼琚洿鏀癸紝鏇存崲鍐呭瓨銆佹仮澶岯IOS榛樿鍊煎嵆鍙3銆佸師鏉ユ寕浜嗕袱涓‖鐩橈紝鍦˙IOS涓...