gpt4 book ai didi

android - ListView 中有不同行时如何使用 View Holder

转载 作者:太空宇宙 更新时间:2023-11-03 11:59:36 26 4
gpt4 key购买 nike

通常适配器会用这个来优化 ListView 的性能:

 @Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("getView " + position + " " + convertView);
ViewHolder holder = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item1, null);
holder = new ViewHolder();
holder.textView = (TextView)convertView.findViewById(R.id.text);
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}
holder.textView.setText(mData.get(position));
return convertView;
}

View 持有者是:

public static class ViewHolder {
public TextView textView;
}

但是如果我有不同类型的行,比如 1 行带有 ImabeView,1 行带有 CheckBox,1 行带有 EditText

第一件事是:

@Override
public int getViewTypeCount() {

return 3;
}

@Override
public int getItemViewType(int position) {

//if something
return 0
//if something else
return 1
//if something different
return 2
}

并在 getView() 中;

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

//if convetView == null, getItemViewType(position) and depending on the type inflate respective layout
convertView.setTag(holder);
//else
holder = (ViewHolder)convertView.getTag();
}

但是 ViewHolders 呢,我应该有 3 个不同的 ViewHolders 并根据类型.......setTag 为各自的 Holder 吗?

我可以找到任何类似这样的例子。实际上我还没有看到 anu ListView 使用超过 1 个 ViewHolder。

我这样做的方式正确吗??

谢谢

最佳答案

没有什么可以阻止您在单个 ViewHolder 类中声明来自所有 ListView 布局的所有可能 View (因此 ViewHolder将保存对示例中的 ImageViewCheckBoxEditText 的引用)。

getView 方法中,当 convertViewnull 时,您将仅在 ViewHolder 中设置 View 该类型的行,ViewHolder 中的所有其他 View 引用都将为 null。当需要使用 ViewHolder 中的 View 时,只需查看您使用的是哪种类型的行,并仅从属于该行的 ViewHolder 中获取 View 。

您还可以为每种类型的行使用三个 ViewHolder 类(并在膨胀时为每个特定行设置它们),但我认为第一个版本更好。最后,只要您正确实现多行类型机制,您就可以采取任何一种方式。

关于android - ListView 中有不同行时如何使用 View Holder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13195624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com