как найти другой (флажок) вид в пользовательском списке - PullRequest
1 голос
/ 18 ноября 2010

Я новичок, поэтому не могу хорошо объяснить ситуацию. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Я пытаюсь реализовать просмотр списка следующим образом:

 [textview][button][checkbox] 
 [textview][button][checkbox]
 [textview][button][checkbox] 
 [textview][button][checkbox] 

Я хочу, чтобы другие флажки были сняты автоматически, когда я нажимаю один из них. Так что это как один выбор. Я пишу следующие коды, которые могут реализовать множественный выбор, но когда я пытаюсь переключить его на одиночный выбор, у меня возникают проблемы.

в checkBoxOnClickListener Я не могу найти другое (флажок) представление и переключить их. Любое предложение приятелей? Дайте мне знать, если вы считаете, что мои навыки экспресса плохие.

Спасибо.

    public class MyAdapter extends SimpleAdapter {

    Map<Integer, Boolean> map;

    LayoutInflater mInflater;

    private List<? extends Map<String, ?>> mList;

    public MyAdapter(Context context, List<Map<String, String>> data, int resource, String[] from, int[] to) {
        super(context, data, resource, from, to);
        map = new HashMap<Integer, Boolean>();
        mInflater = LayoutInflater.from(context);
        mList = data;
        for (int i = 0; i < data.size(); i++) {
            map.put(i, false);
        }
        if (data.get(0).get("value").equals("Male") || data.get(0).get("value").equals("Yes")) {
            map.put(1, true);
        }
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.rapid_diagnosis_row, null);
        }
        TextView textView = (TextView) convertView.findViewById(R.id.multiple_question);
        textView.setText((String) mList.get(position).get("value"));

        CheckBox checkBox = (CheckBox) convertView.findViewById(R.id.multiple_checkbox);
        checkBox.setChecked(map.get(position));

        // save position and checking status into tag
        checkBox.setTag(position);
        checkBox.setOnClickListener(checkBoxOnClickListener);

        return convertView;
    }

    public OnClickListener checkBoxOnClickListener = new OnClickListener() {
        public void onClick(View v) {
            // ((CheckBox) v).toggle();
            boolean checked = ((CheckBox) v).isChecked();
            if (checked) {
                ((CheckBox) v).setChecked(true);
            } else {
                ((CheckBox) v).setChecked(false);
            }
            int p = (Integer) (v.getTag());
            mSimpleAdapter.map.put(p, checked);

                            // this cannot works, helppp
            ListView lv = ((ListView) (v.getParent().getParent()));
            (CheckBox) cb = lv.findViewWithTag(1);
            cb.toggle();
                   .....................

............... } }; }

Ответы [ 2 ]

1 голос
/ 08 августа 2012

Вот пример с «EditText»

v - это вызывающее представление

pv - это его родитель

event_id_tag ​​- это тег, который я дал ему в основной деятельности.

public void onClick(View v) {
  View pv = (View)v.getParent();
  EditText et = (EditText)pv.findViewWithTag("event_id_tag");
1 голос
/ 18 ноября 2010

Проблема в том, что findViewWithTag(1) возвращает ноль? Возможно, findViewWithTag() не выполняет рекурсивный поиск вашего тега. Если вы дважды подниметесь к родителю, то вы получите ListView, а findViewWithTag() будет смотреть на объекты макета, которые будут помечены.

Вы должны пройти через каждого из детей ListView и затем найти флажок, который каждый из них держит. Сложно сказать по фрагменту кода здесь, но почему вы используете установленные во время выполнения теги, чтобы попытаться найти свои флажки, а не идентификаторы?

...