如何在 ListView 自定义适配器中使用 RadioGroup? [英] How to use RadioGroup in ListView custom adapter?
问题描述
我想在我的列表中显示一个选择选项.我在 listView
行中使用了 RadioButton
.我知道 RadioGroup
用于单选.
I want to show a single select option in my list. I am using RadioButton
in my listView
row. I know that RadioGroup
is used for single selection.
但问题是我在 ListRowView
中添加了 RadioButton
.现在我想将所有列表项添加到一个 RadioButton
中.我正在使用 Custom Adapter
和 getView()
.我在 getView()
中得到了 RadioButton
,但是当想在 RadioGroup
中添加它时,它说
But problem is that I have added the RadioButton
in my ListRowView
. Now I want to add all my list items in one RadioButton
. I am using Custom Adapter
and in getView()
. I get the RadioButton
in getView()
, but when want to add it in RadioGroup
it say
视图已经有父视图,之前在父视图中调用 removeView()"
"view already have parent , call removeView() in parent before"
而且我知道它是真的,但是如果我从视图中删除它.然后它是不可见的.
And I know its true, but if I remove it from the view. Then it is not visible.
我还尝试以编程方式创建和添加 RadioButton
.然后将其添加到 RadioGrop
中.然后查看列表行.但是这次因为父对象是RadioGroup
,所以又说
I also try to create and add RadioButton
programmatically. And then add it in RadioGrop
. And then to view of list row. But this time as the parent is RadioGroup
, so again it say
视图已经有父视图,之前在父视图中调用 removeView()"
"view already have parent , call removeView() in parent before"
我想要做的是一次只选择列表中的一项.我的代码如下.
What I want to do is to select only one item in list at a time. My code is as follows.
public class MyAdapter extends ArrayAdapter < MyMenuItem > {
private LayoutInflater mInflater ;
int mResource ;
List < MyMenuItem > mData ;
Context context;
public MyAdapter ( Context context , int resource , int textViewResourceId , List < MyMenuItem > data ) {
super ( context , resource , textViewResourceId , data ) ;
this.context = context;
mData = data ;
mResource = resource ;
mInflater = ( LayoutInflater ) getSystemService ( Context.LAYOUT_INFLATER_SERVICE ) ;
}
@ Override
public View getView ( int position , View convertView , ViewGroup parent ) {
ViewHolder holder = null ;
if ( convertView == null ) {
convertView = mInflater.inflate ( mResource , null ) ;
holder = new ViewHolder ( ) ;
holder.icon = ( ImageView ) convertView.findViewById ( R.id.icon ) ;
holder.text = ( TextView ) convertView.findViewById ( R.id.text ) ;
holder.comment = ( TextView ) convertView.findViewById ( R.id.comment ) ;
LinearLayout lin = ( LinearLayout ) convertView.findViewById ( R.id.linerList ) ;
RadioButton rbtn = new RadioButton ( context );
LayoutParams lparam = new LayoutParams ( LayoutParams.WRAP_CONTENT , LayoutParams.WRAP_CONTENT );
rbtn.setSelected ( false );
holder.check = rbtn;
//radioGroup.addView ( rbtn );
lin.addView ( rbtn , 0 );
convertView.setTag ( holder ) ;
} else {
holder = ( ViewHolder ) convertView.getTag ( ) ;
}
holder.text.setText ( mData.get ( position ).getText ( ) ) ;
holder.comment.setText ( mData.get ( position ).getComment ( ) ) ;
holder.icon.setImageResource ( getApplicationContext ( ).getResources ( ).getIdentifier ( mData.get ( position ).getIcon ( ) ,
"drawable" , getPackageName ( ) )
) ;
return convertView ;
}
}
我的行的 XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:padding="6dip">
<LinearLayout
android:id = "@+id/linerList"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="6dip" />
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_weight="1"
android:layout_height="fill_parent">
<TextView
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_vertical"
android:text="My Application"
android:textSize="20sp"
android:singleLine="true"
android:ellipsize="marquee"
android:textColor="@color/white" />
<TextView
android:id="@+id/comment"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:singleLine="true"
android:ellipsize="marquee"
android:text="Simple application that shows how to use RelativeLayout"
android:textSize="14sp"
android:textColor="@color/light_gray" />
</LinearLayout>
推荐答案
你需要做两件事:
- 使用
mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
- 使您的自定义行视图实现
Checkable
.(有关此的更多信息此处).
- Use
mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
- Make your custom row view implement
Checkable
. (More info about this here).
这篇关于如何在 ListView 自定义适配器中使用 RadioGroup?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!