2012-01-07 41 views
1

我遇到問題。ExpandableListView交換問題

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

} 
+0

請粘貼你的代碼,這樣我們可以找出原因,否則會刺在黑暗中。 – kosa 2012-01-07 12:23:44

回答

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; 
     } 

    });