【问题标题】:ExpandableListView Swapping issueExpandableListView 交换问题
【发布时间】:2012-01-07 11:40:43
【问题描述】:

我有问题。

在我的 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;
    }

}

【问题讨论】:

  • 请粘贴您的代码,这样我们才能找出原因,否则会被刺伤。

标签: android expandablelistview android-edittext


【解决方案1】:

这只是一个猜测,但我认为您需要在 onTouch 事件中动态引用您的 editText 视图。这又是一个猜测,但我认为 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;
        }

    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 2013-11-20
    • 2014-07-27
    • 2011-07-15
    • 2017-01-20
    • 2017-02-01
    相关资源
    最近更新 更多