安卓 - 在ListView中使用单选按钮?

4
我有一个场景,我们需要在listview中设置单选模式的单选按钮。当我点击单选按钮时,它应该进入启用状态。当我点击整个项目时,它应该重定向到新的活动。我参考了下面的链接 link1link2 。我可以找到多选模式的方法,但是没有单选模式。对此有任何想法吗?
编辑:如何找到列表视图中项目所对应的标签?
2个回答

4

你可以通过追踪列表视图上选中单选按钮的位置ID来实现,现在当你点击另一个单选按钮时,实现setOnCheckedChangeListener(listener)并检查已经选择的位置,然后取消该单选按钮的选择。

你可以将单选按钮的状态存储到自定义模型中(包含像文本视图、图像视图、单选按钮等控件的模型,用于列表视图单行),然后添加到列表视图中。

请查看文章,了解如何使用模型,在列表视图中处理组件。其中给出了复选框的示例。

更新

我认为你可以这样获取标签。

((View)((ViewGroup)listview.getItemAtPosition(0)).getTag()).getTag();
or
((Button)l.getItemAtPosition(0)).getTag();

更新2

假设这是您的适配器和ArrayList对象

private List<Model> list_model = new ArrayList<Model>();

private ArrayAdapter<Model> modelAdapter;

您的模型类应该像这样:
private class Model{
    private String text1 = "";
    private boolean isChecked   = false;

    public Model(String text1){
        this.text1 = text1;
        isChecked = false;
    }
}

您的ViewHolder
private static class ViewHolder{
    TextView textView;
        RadioButton radioBtn;
}

在构造函数中将listmodel传递给CustomAdapter类。
private List<Model> list;
private Context context;

public CustomAdapter(Context context, List<Model> list){
    super(context,R.layout.list_layout,list);
    this.list = list;
    this.context = context;
}

现在在getView()中。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = null;

    if(convertView == null){
        LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.gcalendar_list_layout, null);
        final ViewHolder viewHolder = new ViewHolder();
        viewHolder.textView = (TextView) view.findViewById(R.id.text1);
        viewHolder.radioBtn = (RadioButton) view.findViewById(R.id.radioBtn);
        viewHolder.radioBtn.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                Model element = (Model) viewHolder.checkBox.getTag();
                element.isChecked = buttonView.isChecked();
                boolean isChecked = true;
                for(int i=0;i<list.size();i++){
                    if(!list.get(i).isChecked){
                        list.get(i).isChecked=false; // more implement here or may be this work
                        break;
                    }
                }
            }
        });
        view.setTag(viewHolder);
        viewHolder.radioBtn.setTag(list.get(position));
    }else{
        view = convertView;
        ((ViewHolder)view.getTag()).radioBtn.setTag(list.get(position));
    }
    ViewHolder holder = (ViewHolder) view.getTag();
    holder.textView.setText(list.get(position).name);
    holder.radioBtn.setChecked(list.get(position).isChecked);
    return view;
}

但是它没有起作用。它没有禁用先前被选中的单选按钮。 - Praveen

0

当只有一个按钮小部件可供选择时,它是复选框。虽然在配置列表条目视图时需要注册自定义事件监听器,并且要记住这些视图是可重用的(或者如果您不关心性能,则创建新视图)。


好的。那我能自定义复选框图像吗?我需要更改复选框的主题。 - Praveen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接