Проблема с обменом ExpandableListView - PullRequest
1 голос
/ 07 января 2012

У меня проблема.

В моем ExpandableListView у меня есть 2 текстовых поля для редактирования. Когда я вставляю текст в одно из полей редактирования текста, он заменяется.

Почему так .. ??

Заранее спасибо.

Данный класс является подклассом основной деятельности. И str объявлен в классе Activity. При прикосновении к одному дочернему элементу editText он вставляется в другой дочерний элемент редактируемого текста, а не в тот, на котором нажата кнопка.

class ExAdapter extends BaseExpandableListAdapter {

    private Context context;
    int width;
    int j=0;
    EditText editFName;
    String str_fname="";
    String str_lname="";

    final String arrGroupelements[] = 
    {
        "Name",
        "PhoneNo",

    };

    final String arrChildelements[][] = 
    {
       {
          "FirstName",
          "LastName"
       },
       {
          "Mobile",
          "Work",
          "Home"       

       }
    };

    final String arrChildhintelements[][] = 
     {
           {
              "FirstName",
              "LastName"
           },
           {
              "Mobile",
              "Work",
              "Home"
           }

     };

    public ExAdapter(Context context, int width) {
        this.context = context;
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return arrChildelements[groupPosition][childPosition];
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return 0;
    }


    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,
            ViewGroup parent) {

        if(convertView == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.name_child, null);

        }

        TextView txtFName = (TextView) convertView.findViewById(R.id.txtFname);
        txtFName.setText(arrChildhintelements[groupPosition][childPosition]);


        editFName = (EditText) convertView.findViewById(R.id.editFName);
        editFName.setHint(arrChildhintelements[groupPosition][childPosition]);

        editFName.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                editFName.setText(str); 
                return true;
            }

        });

        return convertView;

    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }

}

1 Ответ

0 голосов
/ 16 декабря 2014

Это всего лишь предположение, но я думаю, что вам нужно динамически ссылаться на представление editText в событии onTouch.Опять же, это предположение, но я думаю, что возможно, что переменная editFName перезаписывается при каждом вызове getChildView () и заменяется самым последним editText.Это могло бы объяснить это, потому что события onTouch будут запускаться как обычно, но они будут ссылаться на то, что было установлено в последний раз EditText.

Вместо этого вы захотите, чтобы событие onTouch ссылалось на его собственное представление editText с использованием представления, переданного в событие.Просто теория.Попробуйте и, надеюсь, это сработает.

editFName.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            EditText etTouched = (EditText) v;
            etTouched.setText("SOMETHING"); 
            return true;
        }

    });
...