我有一个包含EditText
观看次数的列表视图。我想为每个编辑文本添加一个setOnFocusChangeListener。但是,我不知道如何访问该视图的位置
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.list, null);
holder.editText = (EditText)convertView.findViewById(R.id.attribute_value);
try {
convertView.setTag(holder);
} catch (NullPointerException e) {
throw new NullPointerException("ViewHolder is empty.");
}
} else {
holder = (ViewHolder)convertView.getTag();
}
holder.editText.setText("my text");
holder.editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
updateValue(position);
}
});
return convertView;
}
不幸的是,我无法传递position
变量。当我创建一个final
变量时,它会以某种方式分解列表中的其他视图。
答案 0 :(得分:1)
我不知道如何访问该视图的位置
使用setTag/getTag
EditText
方法访问position
方法中的onFocusChange
,而无需position
final
:
holder.editText.setText("my text");
holder.editText.setTag(position);
并在onFocusChange
中使用v
第一个参数来发送值:
public void onFocusChange(View v, boolean hasFocus) {
updateValue(Integer.parseInt(v.getTag().toString()));
}
答案 1 :(得分:0)
你有几个选择,但我会超过两个:
你应该可以这样做:
final int itemPosition = position;
holder.editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
updateValue(itemPosition);
}
});
或者你可以去标记路线:
holder.editText.setText("my text");
holder.editText.setTag(position);