从 ArrayList 中删除某些 TextView

Posted

技术标签:

【中文标题】从 ArrayList 中删除某些 TextView【英文标题】:Remove Certain TextViews From ArrayList 【发布时间】:2015-09-15 12:11:44 【问题描述】:

我正在使用RecyclerView 来显示ArrayList,并且我计划有很多TextViews 的组合,所以我没有制作10 个布局文件,而是用我所有的TextViews 制作了一个。

某些行我只想显示TextViews 中的一部分,所以我将它们留空(“”),但显然TextView 仍会占用该空白空间。

所以我认为我必须使用 setVisibility Gone 作为空白,并且可能必须在 onBindViewHolder 下,但我不确定 if 语句的外观。

public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> 

List<AdapterData> mItems;

public Adapter() 
    super();
    mItems = new ArrayList<>();
    AdapterData data = new AdapterData();
    data.setName("dummy text");
    data.setNameTwo("");
    data.setNameThree("");

    mItems.add(data);

    data = new AdapterData();
    data.setName("dummy text");
    data.setNameTwo("dummy text");
    data.setNameThree("");
    mItems.add(data);

    data = new AdapterData();
    data.setName("");
    data.setNameTwo("dummy text");
    data.setNameThree("");
    mItems.add(data);

    data = new AdapterData();
    data.setName("");
    data.setNameTwo("dummy text");
    data.setNameThree("dummy text");
    mItems.add(data);



@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) 
    View v = LayoutInflater.from(viewGroup.getContext())
            .inflate(R.layout.recycler_view_card_item, viewGroup, false);
    return new ViewHolder(v);


@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) 
    AdapterData data = mItems.get(i);
    viewHolder.mName.setText(data.getName());
    viewHolder.mNameTwo.setText(data.getNameTwo());
    viewHolder.mNameThree.setText(data.getNameThree());



@Override
public int getItemCount() 

    return mItems.size();


class ViewHolder extends RecyclerView.ViewHolder

    public TextView mName;
    public TextView mNameTwo;
    public TextView mNameThree;


    public ViewHolder(View itemView) 
        super(itemView);
        mName = (TextView)itemView.findViewById(R.id.layoutName);
        mNameTwo = (TextView)itemView.findViewById(R.id.layoutNameTwo);
        mNameThree = (TextView)itemView.findViewById(R.id.layoutNameThree);

    


【问题讨论】:

【参考方案1】:

使用TextUtils.isEmpty

if(TextUtils.isEmpty(data.getName()))
viewHolder.mName.setVisibility(GONE);
else
 viewHolder.mName.setVisibility(VISIBLE);
 

if(TextUtils.isEmpty(data.getNameTwo()))
viewHolder. mNameTwo.setVisibility(GONE);
else
 viewHolder.mNameTwo.setVisibility(VISIBLE);
 

等等……

【讨论】:

不要忘记“重新显示”视图。例如 if(...)...elseviewHolder.mName.setVisibility(View.VISIBLE) isEmpty 也会检查这个。如果不写data.setName("");也可以。

以上是关于从 ArrayList 中删除某些 TextView的主要内容,如果未能解决你的问题,请参考以下文章

支持获取、设置和删除某些索引的 java arraylist 的 C# 等效项

如何将特定数据字段从 ArrayList 加载到某些 JTextFields?

进度条,直到从服务器加载数据

从 ArrayList 的 ArrayList 中删除重复项 [重复]

从 ArrayList 中删除项目

ArrayList 过滤器 [重复]