如何在 getView 方法之外获取视图和持有者对象?

How to get view and holder object outside getView method?

我有适配器和片段。

考虑这种情况:

  1. 适配器有编辑文本

  2. 默认编辑文本不可编辑

  3. 片段有一个编辑图标
  4. 点击编辑图标适配器的编辑文本应该可以编辑

片段代码如下:

editIcon.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Adapter.makeEditTextEditable();
    }
});

这是适配器代码:

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.layout, null);
        holder = new ViewHolder();
        holder.EditText = (EditText) convertView.findViewById(R.id.edit_text);

    } else {
        holder = (ViewHolder) convertView.getTag();
    }
}


// This is method i am calling from fragment to make editText editable 
public void makeEditTextEditable() {
    // How do i get holder object and view object here? OR
    // How do i make edit text editable from this method?
}

在你的适配器里面

boolean mEditTextEditable = false;

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.layout, null);
        holder = new ViewHolder();
        holder.EditText = (EditText) convertView.findViewById(R.id.edit_text);

    } else {
        holder = (ViewHolder) convertView.getTag();
    }    

    holder.EditText.setEnabled(mEditTextEditable);
}

public void setEditTextEditable(boolean editable) {
    if(editable == mEditTextEditable) return;

    mEditTextEditable = editable;
    notifyDatasetChange();     
}

您要求在 getView() 方法之外获取视图,但我不建议这样做,拥有 ListView/RecyclerView 的全部意义在于不必单独处理这些视图