2012-01-07 9 views
1

問題があります。ExpandableListViewスワッピングの問題

私のExpandableListViewには、2つの編集テキストボックスがあります。 edittextボックスの1つにテキストを貼り付けると、スワップされます。

なぜそうですか?

ありがとうございます。

以下のクラスは、主なアクティビティのサブクラスです。 strはActivityクラスで宣言されています。 1つの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

答えて

0

これは単なる推測ですが、私はあなたのeditTextビューをonTouchイベントで動的に参照する必要があると思います。繰り返しますが、これは推測ですが、editFName変数がgetChildView()の各呼び出しで上書きされ、最新のeditTextに置き換えられている可能性があります。これは、onTouchイベントが正常に発生するため、それを説明することができますが、最近編集されたEditTextを参照することになります。

代わりに、イベントに渡されたビューを使用して、独自のeditTextビューを参照する必要があります。ただの理論。試してみてうまくいけばうまくいきます。

editFName.setOnTouchListener(new OnTouchListener() { 

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

    });