gpt4 book ai didi

java - 从 ViewHolder 中删除行

转载 作者:太空宇宙 更新时间:2023-11-04 11:29:38 25 4
gpt4 key购买 nike

这里完全是核武器。我正在尝试从 Android 应用程序中用作侧边栏菜单的 Viewholder 中删除一行。

其中一个菜单项返回“EMPTY_LABEL”文本。我可以将文本设置为不可见,但我宁愿完全删除该行。关于如何做到这一点有什么想法吗?

下面的代码 - 非常感谢您的帮助!

        ViewHolder holder;
int type = getItemViewType(position);

APMenuItem currentItem = mData.get(position);
Integer rId = getResources().getIdentifier("sidebar_label_" + currentItem.getKey(), "string", APBaseInnerActivity.this.getPackageName());

if (convertView == null) {
holder = new ViewHolder();
switch (type) {
case 1:
convertView = mInflater.inflate(R.layout.drawer_list_item_profile, null);
holder.textView = (TextView) convertView.findViewById(R.id.text1);
holder.textView.setText(APApplication.getUserInfo().getDisplayName());
holder.textView.setHeight(APDimensions.convertDpToPixel(60, APBaseInnerActivity.this));
holder.avatar = (DrawerRoundedImageView) convertView.findViewById(R.id.avatar);
holder.pendingImage = (ImageView) convertView.findViewById(R.id.profile_pending_image);
holder.pendingBackground = (ImageView) convertView.findViewById(R.id.profile_pending_background);

holder.pendingImage.setVisibility(View.GONE);
holder.pendingBackground.setVisibility(View.GONE);

if( APApplication.getUserInfo().getAvatarUrl() != null ) {
holder.avatar.setImageUrl(APApplication.getUserInfo().getAvatarUrl());

if ( !APApplication.getUserInfo().getIsAvatarApproved() )
{
holder.pendingImage.setVisibility(View.VISIBLE);
holder.pendingBackground.setVisibility(View.VISIBLE);
}
}
else {
holder.avatar.setImageResource(R.drawable.rounded_rectangle_2_copy_2);
}

break;
case 2:
convertView = mInflater.inflate(R.layout.drawer_list_item, null);
break;
case 3:
convertView = mInflater.inflate(R.layout.drawer_list_item_bottom, null);
holder.textView = (TextView) convertView.findViewById(R.id.text1);
if( rId != null ){
holder.textView.setText(getResources().getString(rId));
}
else{
holder.textView.setText("EMPTY_LABEL");

}
holder.textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12);
holder.textView.setHeight(APDimensions.convertDpToPixel(40, APBaseInnerActivity.this));
break;
}
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}

if( type == 2 ){
holder.textView = (TextView) convertView.findViewById(R.id.text1);

if( rId != null && rId != 0){
holder.textView.setText(getResources().getString(rId));
}
else{
holder.textView.setText("EMPTY_LABEL");
}

holder.circleView = (TextView) convertView.findViewById(R.id.counter);
holder.textView.setHeight(APDimensions.convertDpToPixel(50, APBaseInnerActivity.this));

if (currentItem.getCount() > 0) {
Integer cnt = currentItem.getCount();
holder.circleView.setText(cnt.toString());
holder.circleView.setVisibility(View.VISIBLE);
} else {
holder.circleView.setVisibility(View.INVISIBLE);
}
}

return convertView;
}
}

public static class ViewHolder {
public TextView textView;
public TextView circleView;
public DrawerRoundedImageView avatar;
public ImageView pendingImage;
public ImageView pendingBackground;
}

}

最佳答案

那么您是在问如何删除显示空值的 TextView 吗?

我认为您误解了 ViewHolder 的概念。 ViewHolder 用于存储 View 引用,以避免每次出现新项目时调用 findViewById()

适配器 View 中的 View 被重用。这意味着 ViewHolder 也是如此。如果您从一个 View 中删除 TextView,那么在重用相同 View 和 viewholder 的其他 View 中,该 TextView 也会被删除。

只需在 getView() 中以编程方式隐藏/显示它。这是一种常见的做法,没有什么问题。如果除此一个 View 之外还有更多差异,请创建单独的布局和另一种 View 类型。

编辑。

就您而言,隐藏和显示 TextView 看起来像这样。

if( rId != null ) {
holder.textView.setVisibility(View.VISIBLE);
holder.textView.setText(getResources().getString(rId));
} else {
holder.textView.setVisibility(View.GONE);
}

关于java - 从 ViewHolder 中删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43946863/

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