我将视图持有者添加到ListView
行以存储小部件。我是这样做的:
public View getView(int position, View row, ViewGroup parent) {
// Check if an existing view is being reused, otherwise inflate the view
if (row == null) {
row = LayoutInflater.from(getContext()).inflate(R.layout.articles_list_row, parent, false);
row.setTag(R.id.articles_list_row_widgets_holder, new TextListRowHolder(row));
}
我还在读一本书,作者将其初始化为:
ViewHolder holder=(ViewHolder)row.getTag();
if (holder==null) {
holder=new ViewHolder(row);
row.setTag(holder);
}
以下是本书的引用:
如果对该行的getTag()调用返回null,我们知道我们需要 创建一个新的ViewHolder,然后我们通过setTag()附加到该行 供以后再使用。
我的方法有误吗?我假设如果row为null,则没有附加的持有者,如果已经创建了行,那么已经连接了持有者。
答案 0 :(得分:1)
no_coding_knowledge是正确的,你需要钥匙才能从标签中取回持有人,因此row.getTag(R.id.articles_list_row_widgets_holder);
应该是你答案的解决方案。
此外,我建议完全摆脱钥匙,因为我很确定你不需要它。
因此,只需使用row.setTag(holder)
和holder = row.getTag()
设置/获取持有者。
如果您想使用密钥R.id.articles_list_row_widgets_holder
,请参阅以下示例代码:
@Override
public View getView(int position, View row, ViewGroup parent) {
TextListRowHolder holder = null;
// Check if an existing view is being reused, otherwise inflate the view
if (row == null) {
row = LayoutInflater.from(getContext()).inflate(R.layout.articles_list_row, parent, false);
holder = new TextListRowHolder(row);
row.setTag(R.id.articles_list_row_widgets_holder, holder);
} else
holder = (TextListRowHolder)row.getTag(R.id.articles_list_row_widgets_holder);
// do something with the holder, like holder.bind(getItem(position))...
}
答案 1 :(得分:0)
您正在使用特定键使用setTag。因此,如果你想得到它,你必须使用getTag(int key)方法来获得它。