1. 程式人生 > >Android之ListView包含RadioButton的單選問題解決辦法

Android之ListView包含RadioButton的單選問題解決辦法

1.最簡潔的解決辦法。

adapter裡儲存當前選中的位置變數,getView方法裡,禁用radiobutton的點選事件,只通過listview的onItemClick事件設定選中位置變數,並且通過notifyDataSetChanged重新整理列表。getView方法裡當前項位置為選中項時設定radiobutton為選中狀態。否則為未選中狀態。通過adapter.getSelectedItem方法獲取當前選中項資料。

注意:本來想著讓阻塞radiobutton的獲取焦點、獲取點選事件,試了各種設定,最後發現rb_status.setClickable(false);禁用radiobutton的點選事件是有效的。


lv_opt.setAdapter(adapter);
		lv_opt.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				adapter.setSelectedIndex(position);
			}
		});


public class AdapterOptionList extends BaseAdapter<OptionItem> {

	public AdapterOptionList(Context context, List<OptionItem> list) {
		super(context, list);
	}
/**
<span style="white-space:pre">	</span> * 設定選中的專案
<span style="white-space:pre">	</span> * 
<span style="white-space:pre">	</span> * @param position
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>public void setSelectedIndex(int position) {
<span style="white-space:pre">		</span>this.selectedIndex = position;
<span style="white-space:pre">		</span>notifyDataSetChanged();
<span style="white-space:pre">	</span>}
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder viewHolder;
		if (null == convertView) {
			viewHolder = new ViewHolder();
			LayoutInflater inflater = LayoutInflater.from(context);
			convertView = inflater.inflate(R.layout.item_opt,null);
			viewHolder.rb_status = (RadioButton) convertView
					.findViewById(R.id.rb_status);
			viewHolder.tv_title_opt = (TextView) convertView
					.findViewById(R.id.tv_title_opt);
			viewHolder.tv_opt_detail = (TextView) convertView
					.findViewById(R.id.tv_opt_detail);
			convertView.setTag(viewHolder);
		} else {
			viewHolder = (ViewHolder) convertView.getTag();
		}
		viewHolder.rb_status.setClickable(false);

		OptionItem opt = list.get(position);
		if(selectedIndex == position){
			viewHolder.rb_status.setChecked(true);
			opt.setSeletedStatus(true);
		}else{
			viewHolder.rb_status.setChecked(false);
			opt.setSeletedStatus(false);
		}
		
		viewHolder.tv_title_opt.setText(opt.getName());
		viewHolder.tv_opt_detail.setText(opt.getDiscription());
		return convertView;
	}

	class ViewHolder {
		RadioButton rb_status;
		TextView tv_title_opt;
		TextView tv_opt_detail;
	}
}

2.最簡單粗暴的辦法。

adapter裡設定每一個radiobutton的狀態集合變數,在radiobutton的setOnCheckedChangeListener方法裡設定集合裡的每個radiobutton狀態,然後通過notifyDataSetChanged重新整理列表。

比如http://blog.csdn.net/checkin001/article/details/11519131

相關推薦

AndroidListView包含RadioButton問題解決辦法

1.最簡潔的解決辦法。 adapter裡儲存當前選中的位置變數,getView方法裡,禁用radiobutton的點選事件,只通過listview的onItemClick事件設定選中位置變數,並且通過notifyDataSetChanged重新整理列表。getView方法裡

androidListView多次呼叫getView解決辦法

前言 最近遇到一個bug,寫了一個簡單的listview,不過listview的條目內含的控制元件較多(且控制元件的狀態即顯隱狀態也比較複雜),結果就導致了,一個bug,例如我的item只有3個,但是getView居然被呼叫了幾十次。實在是驚人的很。這也間接導

Android控制元件:RadioButton(按鈕)

首先,在佈局檔案 activity_main.xml中註冊一個RadioGroup,併為RadioGroup設定監聽,圖中兩個RadioButton為一個RadioGroup。 activity_main.xml <LinearLayout xmlns:and

android RadioButton控制元件

示例程式碼:前端程式碼:<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schem

IOS開源專案(2)RadioButton控制元件學習

1 前言 眾所周知在IOS中沒有單選按鈕這一控制元件,今天我們來學習一下簡單的單選控制元件。類似與Web中的radio表單元素。 2 詳述 本控制元件單純的利用按鈕控制元件和NSObject的respondsToSelector方法來判斷某一個類中是否存在某方法。 程式碼概

Android開發技巧——自定義或多ListView

這篇其實應該是屬於寫自定義單選或多選的ListView的基礎教程,無奈目前許多人對此的實現大多都繞了遠路,反而使得這正規的寫法倒顯得有些技巧性了。 本文原創,轉載請註明在CSDN上的出處: http://blog.csdn.net/maosidiaoxian/article

androidlistviewitem展開內容

本文轉載自: http://blog.csdn.net/baidu_nod/article/details/38610749 import java.util.ArrayList;   import android.app.Activity;   import and

RadioButton(按鈕)

horizon group get radio andro bsp edr 布局 按鈕 RadioGroup(單選按鈕組): android:orientation="horizontal" //設置布局方式 android:checkedButton="單選按鈕i

AndroidListView的getItemViewType和getViewTypeCount

ldr get 思路 pre 簡單 erl 他會 add item PS:感覺這兩個方法其實還是很容易理解的,也算是給我其他兩個朋友寫的吧,幫他們搞清楚這兩個方法的用法和概念。同時還有一些小細節問題需要註意。 學習內容: 1.getItemViewType和get

RadioButton(按鈕)&Checkbox(復框)

choose cli oncreate resources 屬性設置 public orm and .html 本節引言: 本節給大家帶來的是Andoird基本UI控件中的RadioButton和Checkbox; 先說下本節要講解的內容是:RadioButton和C

AndroidListView的item獲取不到焦點

前兩天我在寫一個ListView,其中自定義的item中的控制元件有ImageView、TextView、Button,反正是比較複雜,寫完一整套流程後,真機一執行,詭異的事情出現了,點選item居然無響應。這怎麼回事呢?找了又找,程式碼看了一遍又一遍,沒問題

Android Studio ListView的item點事件彈出AlertDialog,和item的滑動

首先看看效果圖: 點選彈出AlertDialog的確認框! (一)第一步,建立一個xml檔案顯示item的佈局 student_item.xml <?xml version="1.0" encoding="utf-8"?> <LinearLa

android ScrollView中巢狀GridView,ListView只顯示一行的解決辦法

注:本文是由網上大神分享的解決方案彙集而成 方法一: 重寫ListView、GridView: 重寫ListView: public class MyListView extends ListView { public MyListView(Context contex

AndroidListView分頁獲取網路資料(伺服器端)(一)

資料庫分頁: mysql:select pname from product limit 0,2;第一個引數是指要開始的地方,第二個引數是指每頁顯示多少條資料;注意:第一頁用0表示。 oracle:rownumber SqlServer:top 一、伺服器端 ①新建包com

Androidlistview新增資料篇

一、ListView:        1、 ListView通常有兩個職責:                                 1、向佈局填充資料                                 2、處理選擇點選等操作       2、ListView的建立需要3個元素:  

ALV GRID中實現RadioButton按鈕

TYPE-POOLS:ABAP, slis. DATA: BEGIN OF gt_list OCCURS 0,         sel TYPE char4,         val TYPE i,       END OF gt_list. DATA: go_alv_grid TYPE REF TO cl

androidlistview分頁載入上拉重新整理、更新listview

==========系統方法實現上啦重新整理=========public class GreatToolsActivity extends Activity { private TextView tv; private ListView listtest;

androidlistView快取機制

package com.example.day_05_06; import java.util.ArrayList; import java.util.List; import com.litsoft.General.General; import android.support.v7.app.ActionB

AndroidListView優化(使用Lrucache,圖片滑動時使用預設圖片,停止時載入)

注意:LruCache是有版本限制的,低版本的sdk需要在libs資料夾新增相應的support-4v檔案。 本文改造的大部分是參考http://www.iteye.com/topic/1118828,感謝。 不廢話直接上工程程式碼,內有關鍵註釋,專案就不上傳了,自己對照著

androidlistview的item點切換實現效果(選擇器selector)

public class V2_Adapter_TarentoCreateActivity_OverSea_City extends BaseAdapter{private V2_TarentoCreateActivity_OverSea_Place v2_TarentoCreateActivity_Over