RadioButton 适配器不发送 String 而不是实际的 RadioButton 到 listView
RadioButton adapter not sending String instead of actual RadioButton to the listView
编辑:通过使用答案中的一些链接,我刚刚制作了一个自定义适配器(字面上少于 10 行代码),现在一切正常。这是我做的 CustomAdapter
以防有人遇到类似问题。请注意,CustomAdapter
适用于扩展 'View'.
的任何 class
public class CustomAdapter extends BaseAdapter {
Context context;
List<View> views;
public CustomAdapter(Context context, List<View> views){
this.context = context;
this.views = views;
}
@Override
public int getCount() {
return views.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
return views.get(i);
}}
我制作了一个简单的 Activity
,用于显示我传递给它的 radioButtons
的列表。为了测试一下,在将其传递给 activity
之前,我只是尝试在 activity
中创建一个新的 RadioButton
,将其添加到列表中,然后让适配器将其传递给listView
.
public class SpecialListActivity extends Activity {
private ListView listView;
private ArrayAdapter<RadioButton> adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_special_list);
List<RadioButton> list = new ArrayList<RadioButton>();
RadioButton radioButton = new RadioButton(this);
radioButton.setText("test");
list.add(radioButton);
listView = (ListView) findViewById(R.id.listView);
adapter = new ArrayAdapter<RadioButton>(this,R.layout.message_row,list);
listView.setAdapter(adapter);
}
}
这是 .xml 文件,它非常简单,只有一个 listView。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listView">
</ListView>
</LinearLayout>
我预期的结果是单个 RadioButton 出现在列表中,但结果有点不同。
导致此行为的原因可能是什么?我该如何尝试让列表显示实际的单选按钮或任何其他自定义视图?
这不是它的工作原理。您必须使用带有字符串列表的 ListView.CHOICE_MODE_SINGLE
来填充单选 ListView
。下面是一个尝试的示例。
String[] names = new String[] { "Canada", "USA", "Iceland", "Ireland"};
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
listView.setListAdapter(new ArrayAdapter<>(this,
android.R.layout.simple_list_item_single_choice,
android.R.id.text1, names));
您已经在 List 和 ArrayAdapter 中定义了 RadioButton 数据类型,并且您正在传递 RadioButton 对象,因此它将打印 RadioButton 对象。
如果您想传递 RadioButton 的文本,请使用以下代码。
public class SpecialListActivity extends Activity {
private ListView listView;
private ArrayAdapter<String> adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_special_list);
List<String> list = new ArrayList<String>();
RadioButton radioButton = new RadioButton(this);
radioButton.setText("test");
list.add(radioButton.getText().toString());
listView = (ListView) findViewById(R.id.listView);
adapter = new ArrayAdapter<String>(this,R.layout.message_row,list);
listView.setAdapter(adapter);
}
}
如果您想使用 RadioButton 创建自定义 ListView,请使用下面的 link。
http://abhiandroid.com/ui/radiobutton-inside-listview.html
编辑:通过使用答案中的一些链接,我刚刚制作了一个自定义适配器(字面上少于 10 行代码),现在一切正常。这是我做的 CustomAdapter
以防有人遇到类似问题。请注意,CustomAdapter
适用于扩展 'View'.
public class CustomAdapter extends BaseAdapter {
Context context;
List<View> views;
public CustomAdapter(Context context, List<View> views){
this.context = context;
this.views = views;
}
@Override
public int getCount() {
return views.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
return views.get(i);
}}
我制作了一个简单的 Activity
,用于显示我传递给它的 radioButtons
的列表。为了测试一下,在将其传递给 activity
之前,我只是尝试在 activity
中创建一个新的 RadioButton
,将其添加到列表中,然后让适配器将其传递给listView
.
public class SpecialListActivity extends Activity {
private ListView listView;
private ArrayAdapter<RadioButton> adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_special_list);
List<RadioButton> list = new ArrayList<RadioButton>();
RadioButton radioButton = new RadioButton(this);
radioButton.setText("test");
list.add(radioButton);
listView = (ListView) findViewById(R.id.listView);
adapter = new ArrayAdapter<RadioButton>(this,R.layout.message_row,list);
listView.setAdapter(adapter);
}
}
这是 .xml 文件,它非常简单,只有一个 listView。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listView">
</ListView>
</LinearLayout>
我预期的结果是单个 RadioButton 出现在列表中,但结果有点不同。
导致此行为的原因可能是什么?我该如何尝试让列表显示实际的单选按钮或任何其他自定义视图?
这不是它的工作原理。您必须使用带有字符串列表的 ListView.CHOICE_MODE_SINGLE
来填充单选 ListView
。下面是一个尝试的示例。
String[] names = new String[] { "Canada", "USA", "Iceland", "Ireland"};
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
listView.setListAdapter(new ArrayAdapter<>(this,
android.R.layout.simple_list_item_single_choice,
android.R.id.text1, names));
您已经在 List 和 ArrayAdapter 中定义了 RadioButton 数据类型,并且您正在传递 RadioButton 对象,因此它将打印 RadioButton 对象。
如果您想传递 RadioButton 的文本,请使用以下代码。
public class SpecialListActivity extends Activity {
private ListView listView;
private ArrayAdapter<String> adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_special_list);
List<String> list = new ArrayList<String>();
RadioButton radioButton = new RadioButton(this);
radioButton.setText("test");
list.add(radioButton.getText().toString());
listView = (ListView) findViewById(R.id.listView);
adapter = new ArrayAdapter<String>(this,R.layout.message_row,list);
listView.setAdapter(adapter);
}
}
如果您想使用 RadioButton 创建自定义 ListView,请使用下面的 link。 http://abhiandroid.com/ui/radiobutton-inside-listview.html