从TextWatcher内部检索ListView项目中的其他视图

时间:2016-11-23 15:57:01

标签: android listview

我想从TextWatcher(在listview中)中更改holder.title文本。最好的方法是什么? 我无法将holder.title设置为final,我需要另一种解决方案。

 public View getView(int position, View convertView, ViewGroup parent){

    View ListItem = convertView;

    Holder holder;

    if (ListItem == null) {

        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        ListItem = inflater.inflate(layoutResourceId, parent, false);

        holder = new Holder();
        holder.banner = (ImageView)ListItem.findViewById(R.id.banner);
        holder.title = (TextView) ListItem.findViewById(R.id.titleText);
        holder.editText = (EditText) ListItem.findViewById(R.id.edittext);

        ListItem.setTag(holder);
    } else {
        holder = (Holder) ListItem.getTag();
    }

    TextWatcher textWatcher = (new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            holder.title.setText(s.toString() + " Title") // I want to access holder.title to do this..
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

    return ListItem;
}

1 个答案:

答案 0 :(得分:0)

我通过创建一个实现TextWatcher的新类并添加我自己的方法来修复它,以便我可以将我的Holder对象传递给它..

public class MyTextWatcher implements TextWatcher {

    public MyClass.Holder holder;

    public void setView(CharityAmountAdapter.Holder newHolder){
        holder = newHolder;
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        holder.title.setText(s.toString() + "Test");
    }

    @Override
    public void afterTextChanged(Editable s) {

    }
}