带有 RadioButton 单选的自定义 ListView
Posted
技术标签:
【中文标题】带有 RadioButton 单选的自定义 ListView【英文标题】:Custom ListView with RadioButton single choice 【发布时间】:2014-05-03 01:05:37 【问题描述】:我希望你们中的一些人可以帮助我:
我有一个自定义列表视图 2 个文本视图和 1 个单选按钮。
我想把它作为一个单一的选择,但每次我 单击列表视图上的项目,它不会删除 从另一个单选按钮“检查”。
我的xml代码:
<LinearLayout
android:layout_
android:layout_ >
<LinearLayout
android:layout_
android:layout_
android:orientation="vertical" >
<TextView
android:id="@+id/tvMaterialName"
android:layout_
android:layout_
android:padding="5dp"
android:text="MaterialName"
android:textSize="35px" />
<TextView
android:id="@+id/tvMaterialNo"
android:layout_
android:layout_
android:padding="5dp"
android:text="MaterialNo"
android:textSize="1px"
android:visibility="invisible" />
</LinearLayout>
<RadioButton
android:id="@+id/rdBtn"
android:layout_
android:layout_
android:focusable="false"
android:checked="false" />
</LinearLayout
还有我的 onItemClickListener:
searchList.setOnItemClickListener(new OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> parent, View v,
int position, long id)
LinearLayout item_view = (LinearLayout) v;
RadioButton itemcheck = (RadioButton) item_view
.findViewById(R.id.rdBtn);
itemcheck.setChecked(true);
if (itemcheck.isChecked())
itemcheck.setChecked(true);
else
itemcheck.setChecked(false);
);
我的适配器中的 getView()
@Override
public View getView(final int position, View convertView, ViewGroup parent)
final ViewHolder viewHolder;
final Materials materialItem = getItem(position);
parent.setClickable(true);
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
convertView = inflater.inflate(R.layout.d, null, false);
viewHolder = new ViewHolder();
viewHolder.tvMaterialName = (TextView) convertView
.findViewById(R.id.tvMaterialName);
viewHolder.tvMaterialNo = (TextView) convertView
.findViewById(R.id.tvMaterialNo);
convertView.setTag(viewHolder);
else
viewHolder = (ViewHolder) convertView.getTag();
viewHolder.tvMaterialName.setText(materialItem.getMaterialName());
viewHolder.tvMaterialNo.setText(materialItem.getMaterialNo());
return convertView;
感谢您的帮助
【问题讨论】:
CustomAdaptergetView()
的邮政编码。
你的列表类型是什么,我的意思是列表中的项目。
我现在已经从我的适配器发布了我的 getView :)
【参考方案1】:
试试这样:
public class CheckedLinearLayout extends RelativeLayout implements
Checkable
private boolean isChecked;
private List<Checkable> checkableViews;
public CheckedLinearLayout (Context context, AttributeSet attrs,
int defStyle)
super(context, attrs, defStyle);
initialise(attrs);
public CheckedLinearLayout (Context context, AttributeSet attrs)
super(context, attrs);
initialise(attrs);
public CheckedLinearLayout (Context context, int checkableId)
super(context);
initialise(null);
public boolean isChecked()
return isChecked;
public void setChecked(boolean isChecked)
this.isChecked = isChecked;
for (Checkable c : checkableViews)
c.setChecked(isChecked);
public void toggle()
this.isChecked = !this.isChecked;
for (Checkable c : checkableViews)
c.toggle();
@Override
protected void onFinishInflate()
super.onFinishInflate();
final int childCount = this.getChildCount();
for (int i = 0; i < childCount; ++i)
findCheckableChildren(this.getChildAt(i));
/**
* Read the custom XML attributes
*/
private void initialise(AttributeSet attrs)
this.isChecked = false;
this.checkableViews = new ArrayList<Checkable>(5);
/**
* Add to our checkable list all the children of the view that implement the
* interface Checkable
*/
private void findCheckableChildren(View v)
if (v instanceof Checkable)
this.checkableViews.add((Checkable) v);
if (v instanceof ViewGroup)
final ViewGroup vg = (ViewGroup) v;
final int childCount = vg.getChildCount();
for (int i = 0; i < childCount; ++i)
findCheckableChildren(vg.getChildAt(i));
【讨论】:
以上是关于带有 RadioButton 单选的自定义 ListView的主要内容,如果未能解决你的问题,请参考以下文章
解决radiobutton在gridview中无法单选的一种方法
ASP.NET GridView中加入RadioButton不能单选的解决方案