【问题标题】:how to Select multiple radiobuttons in listview and arranging in arraylist using their positions如何在列表视图中选择多个单选按钮并使用它们的位置在数组列表中排列
【发布时间】:2015-03-02 19:39:45
【问题描述】:

我有 25 个问题,每个问题都有 4 个选项(只有 4 个单选按钮)在 listview 中的四个选项中进行选择。我正在准确地获得选定的位置和他们的单选 ID,但我无法在 arraylist 中使用单选 ID 保持他们的位置。并且另一个问题是当列表视图滚动时,选中的单选按钮放错了位置。请在下面帮助我。

提前致谢!

这是我的适配器类,请查看。

公共类 CustomListAdapter 扩展 BaseAdapter {

    private Integer[] listData;
    int selectedPosition = -1;
    private LayoutInflater mInflater;

    public CustomListAdapter(Context context, Integer[] listData) {
        super();
        this.listData = listData;
        mInflater = LayoutInflater.from(context);
        validdata = new ArrayList<String>();
        int size = values.length;
        Log.d("size", "" + size);
        for (int i = 0; i < size; i++) {
            checked.add(false);
            validdata.add("");
            checkeddata.add("");

        }
    }

    @Override
    public int getCount() {
        return listData.length;
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    public View getView(final int position, View convertView,
            ViewGroup parent) {
        final ViewHolder holder;
        View view = convertView;

        if (view == null) {
            view = mInflater.inflate(R.layout.items, null);
            holder = new ViewHolder();
            holder.headlineView = (TextView) view
                    .findViewById(R.id.textview1);
            holder.r1 = (RadioButton) view.findViewById(R.id.radio0);
            holder.r2 = (RadioButton) view.findViewById(R.id.radio1);
            holder.r3 = (RadioButton) view.findViewById(R.id.radio2);
            holder.r4 = (RadioButton) view.findViewById(R.id.radio3);
            holder.rp = (RadioGroup) view.findViewById(R.id.rgOpinion);
            holder.rp.setTag(position);
            view.setTag(holder);

            holder.rp
                    .setOnCheckedChangeListener(new OnCheckedChangeListener() {

                        public void onCheckedChanged(RadioGroup group,
                                int checkedId) {
                            // TODO Auto-generated method stub
                            View radioButton = group
                                    .findViewById(checkedId);
                            final String radioId = String.valueOf(group
                                    .indexOfChild(radioButton));
                            final int radio = group
                                    .indexOfChild(radioButton);
                            String radioid;

                            Log.d("radioid", "" + radioId);
                            if (holder.r1.isChecked()) {
                                holder.r1
                                        .setChecked(position == selectedPosition);
                                holder.r1.setTag(position);
                                holder.r1.setChecked(true);
                                holder.r1
                                        .setOnClickListener(new View.OnClickListener() {
                                            @Override
                                            public void onClick(View view) {
                                                selectedPosition = (Integer) view
                                                        .getTag();
                                                notifyDataSetChanged();
                                                Log.d("selectesxsxad", ""
                                                        + selectedPosition);
                                                String s = listData[selectedPosition]
                                                        .toString();
                                                checked.add(
                                                        selectedPosition,
                                                        true);

                                                Log.d("valid", "" + checked);

                                            }
                                        });
                                radioid = "A";

                            } else if (holder.r2.isChecked()) {
                                holder.r2
                                        .setChecked(position == selectedPosition);
                                holder.r2.setTag(position);
                                holder.r2.setChecked(true);
                                holder.r2
                                        .setOnClickListener(new View.OnClickListener() {
                                            @Override
                                            public void onClick(View view) {
                                                selectedPosition = (Integer) view
                                                        .getTag();
                                                notifyDataSetChanged();
                                                Log.d("selectesxsxad", ""
                                                        + selectedPosition);
                                                validdata.add(
                                                        selectedPosition,
                                                        radioId);
                                                Log.d("valid", ""
                                                        + validdata);

                                            }
                                        });
                                radioid = "B";

                            } else if (holder.r3.isChecked()) {
                                holder.r3
                                        .setChecked(position == selectedPosition);
                                holder.r3.setTag(position);

                                holder.r3.setChecked(true);
                                holder.r3
                                        .setOnClickListener(new View.OnClickListener() {
                                            @Override
                                            public void onClick(View view) {
                                                selectedPosition = (Integer) view
                                                        .getTag();
                                                notifyDataSetChanged();
                                                Log.d("selectesxsxad", ""
                                                        + selectedPosition);
                                                validdata.add(
                                                        selectedPosition,
                                                        radioId);
                                                Log.d("valid", ""
                                                        + validdata);

                                            }
                                        });
                                radioid = "C";

                            } else if (holder.r4.isChecked()) {
                                holder.r4
                                        .setChecked(position == selectedPosition);
                                holder.r4.setTag(position);
                                holder.r4.setChecked(true);
                                holder.r4
                                        .setOnClickListener(new View.OnClickListener() {
                                            @Override
                                            public void onClick(View view) {
                                                selectedPosition = (Integer) view
                                                        .getTag();
                                                notifyDataSetChanged();
                                                Log.d("selectesxsxad", ""
                                                        + selectedPosition);
                                                validdata.add(
                                                        selectedPosition,
                                                        radioId);
                                                Log.d("valid", ""
                                                        + validdata);

                                            }
                                        });
                                radioid = "D";

                            }
                        }
                    });

        } else {
            holder = (ViewHolder) view.getTag();
        }
        holder.rp = (RadioGroup) view.findViewById(R.id.rgOpinion);
        holder.r1 = (RadioButton) view.findViewById(R.id.radio0);
        holder.r2 = (RadioButton) view.findViewById(R.id.radio1);
        holder.r3 = (RadioButton) view.findViewById(R.id.radio2);
        holder.r4 = (RadioButton) view.findViewById(R.id.radio3);
        holder.headlineView.setText(listData[position].toString());
        holder.r1.getTag(position);
        if (holder.r1.isChecked()) {
            holder.r1.setChecked(true);
        } else if (holder.r2.isChecked()) {
            holder.r2.setChecked(true);
        } else if (holder.r3.isChecked()) {
            holder.r3.setChecked(true);
        } else if (holder.r4.isChecked()) {
            holder.r4.setChecked(true);
        }
        return view;
    }

    public class ViewHolder {
        TextView headlineView;
        RadioGroup rp;
        RadioButton r1, r2, r3, r4;
    }

【问题讨论】:

  • 在一个带有位置的数组列表中保持状态
  • 我无法说明它们。你能举个例子吗..@komal gundavarpu

标签: android listview radio-button


【解决方案1】:

试试这个代码,它正在工作 1.我采用了一个带有字符串和整数的bean类作为字段我正在创建一个类型为bean的arraylist 2. 在 onCreate 我正在创建对象并设置需要的问题并添加到列表 // 这里是适配器代码

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder mHolder;
    // if (convertView == null) {
    mHolder = new ViewHolder();
    convertView = LayoutInflater.from(mContext).inflate(R.layout.listitems, null);
    mHolder.mTextView = (TextView) convertView.findViewById(R.id.textView1);
    mHolder.mGroup = (RadioGroup) convertView.findViewById(R.id.radioGroup1);
    mHolder.mRedButton1 = (RadioButton) convertView.findViewById(R.id.radio0);
    mHolder.mRedButton2 = (RadioButton) convertView.findViewById(R.id.radio1);
    mHolder.mRedButton3 = (RadioButton) convertView.findViewById(R.id.radio2);
    // convertView.setTag(mHolder);
    // }
    // else {
    // mHolder = (ViewHolder) convertView.getTag();
    // }
    final MyQuestion mMyQuestion = myQuestions.get(position);
    mHolder.mTextView.setText(mMyQuestion.getmQuestion());

    int mQuestion_answed = mMyQuestion.getQuestion_answed();
    mHolder.mGroup.setOnCheckedChangeListener(null);

    if (mQuestion_answed != 0) {
        switch (mQuestion_answed) {
        case 1:
            mHolder.mRedButton1.setChecked(true);
            break;
        case 2:
            mHolder.mRedButton2.setChecked(true);
            break;
        case 3:
            mHolder.mRedButton3.setChecked(true);
            break;
        default:
            break;
        }
    }

    // listener for radioGroup
    mHolder.mGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            switch (checkedId) {
            case R.id.radio0:
                mMyQuestion.setQuestion_answed(1);
                break;
            case R.id.radio1:
                mMyQuestion.setQuestion_answed(2);
                break;
            case R.id.radio2:
                mMyQuestion.setQuestion_answed(3);
                break;
            default:
                break;
            }
        }
    });
    return convertView;
}

// 视图持有者

private class ViewHolder {
    TextView mTextView;
    RadioGroup mGroup;
    RadioButton mRedButton1, mRedButton2, mRedButton3;
}

// 豆类

public class MyQuestion {
private String mQuestion;
private int question_answed;

public MyQuestion() {
    super();
}

public String getmQuestion() {
    return mQuestion;
}

public void setmQuestion(String mQuestion) {
    this.mQuestion = mQuestion;
}

public int getQuestion_answed() {
    return question_answed;
}

public void setQuestion_answed(int question_answed) {
    this.question_answed = question_answed;
}

}

这是我正在使用的 ArrayList

private ArrayList<MyQuestion> mQuestionsList = new ArrayList<MyQuestion>();

【讨论】:

  • 你能把你用的bean类和arraylist发给我吗? @komal gundavarapu
  • 它的工作...感谢您的帮助...@komal gundavarapu
  • @preethi 你的欢迎放弃投票.. 所以其他人可以使用这个
猜你喜欢
  • 2014-06-19
  • 2016-06-17
  • 2019-10-15
  • 2018-09-19
  • 2014-03-07
  • 2014-01-09
  • 2013-04-12
  • 2012-07-17
  • 2016-07-18
相关资源
最近更新 更多