如何在 getView 方法之外获取视图和持有者对象?
How to get view and holder object outside getView method?
我有适配器和片段。
考虑这种情况:
适配器有编辑文本
默认编辑文本不可编辑
- 片段有一个编辑图标
- 点击编辑图标适配器的编辑文本应该可以编辑
片段代码如下:
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 的全部意义在于不必单独处理这些视图
我有适配器和片段。
考虑这种情况:
适配器有编辑文本
默认编辑文本不可编辑
- 片段有一个编辑图标
- 点击编辑图标适配器的编辑文本应该可以编辑
片段代码如下:
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 的全部意义在于不必单独处理这些视图