android 获取view引用,android-在ViewHolder中引用活动

博客探讨了在Android开发中,ArrayAdapter的getView方法内使用ViewHolder时,是否安全将Activity的句柄存储在ViewHolder中。作者展示了一个简化版的代码示例,其中ViewHolder持有一个Context引用。文章讨论了这种做法的潜在风险和常见实践,询问是否通常避免在ViewHolder中存储对视图的引用,以及这样做的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用setTag方法存储的ViewHolder中保留Activity的句柄是否安全?

具体来说,我想知道拥有这样的ViewHolder是否安全:

class MyHolder {

private Context context; // <

private TextView textView;

public MyHolder(Context context) {

this.context = context;

}

public void populate(Doc doc) {

textView.setText(context.getString(doc.getTextId()));

}

public View inflate(ViewGroup parent) {

View view = LayoutInflater.from(parent.getContext()).inflate(

R.layout.doc_item, parent, false);

textView = (TextView)view.findViewById(R.id.doc_item_text);

return view;

}

}

在我的ArrayAdapter中使用getView方法,如下所示:

@Override

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

Doc doc = getItem(position);

MyHolder holder;

if (row != null) {

holder = (MyHolder) row.getTag();

} else {

holder = new MyHolder(getContext());

row = holder.inflate(parent);

row.setTag(holder);

}

holder.populate(doc);

return row;

}

(该代码是实际代码库的简化版本,目的只是为了说明这一点.)

我见过的示例代码都没有在持有者中存储对视图的引用.我想知道这是巧合还是设计使然.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值