添加侦听器以在列表视图中查看

时间:2016-01-29 18:40:16

标签: android listview

我有一个包含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变量时,它会以某种方式分解列表中的其他视图。

2 个答案:

答案 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);