我有一个问题。
在我的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 :(得分: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;
}
});