ExpandableListView交换问题

时间:2012-01-07 11:40:44

标签: android expandablelistview android-edittext

我有一个问题。

在我的ExpandableListView中,我有2个编辑文本框。当我在其中一个edittext框中粘贴文本时,它会被交换。

为什么这样...... ??

提前致谢。

以下类是主要活动的子类。 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 :(得分:0)

这只是猜测,但我认为您需要在onTouch事件中动态引用editText视图。这是猜测,但我认为有可能在每次调用getChildView()时覆盖editFName变量,并用最新的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;
        }

    });