MySQL建立多选一列表_如何实现自定义列表的多个item,的单选或多选
展開全部
自定義ListView item中包含一個e69da5e6ba903231313335323631343130323136353331333337376333textview 和checkbox,checkbox選中級別高于item,故在xml中進行屏蔽
單選方法:(該方法同樣適用于radiobutton)
main.xml
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
android:id="@+id/img"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:src="@drawable/triangle16blue"/>
android:id="@+id/lvGroup"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/downbutton_corner"/>
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
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" />
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"/>
MainActivity.javapublic class MainActivity extends Activity {
private static final String TAG = "MainActivity";
private ListView listView;
private ArrayList groups;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
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");
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 list;
private LayoutInflater inflater=null;//導入布局
private int temp=-1;
public GroupAdapter(Activity context, ArrayList 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 groups;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
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");
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 list;
//控制CheckBox選中情況
private static HashMap isSelected;
private LayoutInflater inflater=null;//導入布局
public GroupAdapter(Context context, ArrayList list) {
this.context = context;
this.list = list;
inflater=LayoutInflater.from(context);
isSelected=new HashMap();
initData();
}
private void initData(){//初始化isSelected的數據
for(int i=0;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 HashMapgetIsSelected(){
return isSelected;
}
public static void setIsSelected(HashMap 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負責發送消息,提取數據,處理數據
本回答被提問者和網友采納
已贊過
已踩過<
你對這個回答的評價是?
評論
收起
總結
以上是生活随笔為你收集整理的MySQL建立多选一列表_如何实现自定义列表的多个item,的单选或多选的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python实现简单的名字管理系统_py
- 下一篇: 计算机打印机无法扫描,佳能MF4752打