为了账号安全,请及时绑定邮箱和手机立即绑定

隐藏多个空文本视图

隐藏多个空文本视图

繁星淼淼 2023-03-17 13:50:14
我正在使用一个RecyclerView, 和一个CardView, 其中包括多个TextViews。每张卡片都需要显示不同数量的TextViews,因此有些卡片会是空的,如果是空的,它只会在卡片上显示一个空白区域。这一切都在 的适配器中执行RecyclerView。例如:Card 1: (id 1)3 TextViews showingCard 2: (id 2)10 TextViews showingCard 3: (id 3)7 TextViews showing我目前使用 if else 语句来确定它是哪一组文本,然后它分配文本视图、设置文本或隐藏视图。我试图创建一个简单的循环来循环遍历所有文本视图并在它们为空时隐藏它们。但是,我尝试的方式不起作用,因为它使用字符串作为TextView.适配器类:        .Adapter<SettingsAdapter        .DataObjectHolder> {    private ArrayList<DataObject> mDataset;    Context context;    public static class DataObjectHolder extends RecyclerView.ViewHolder {        public DataObjectHolder(View itemView) {            super(itemView);            setting1 = (TextView) itemView.findViewById(R.id.textView);            setting2 = (TextView) itemView.findViewById(R.id.textView2);           //... assigning all the textviews        }    }    public SettingsAdapter(ArrayList<DataObject> myDataset, Context context) {        mDataset = myDataset;        this.context = context;    }    @Override    public DataObjectHolder onCreateViewHolder(ViewGroup parent,                                               int viewType) {        View view = LayoutInflater.from(parent.getContext())                .inflate(R.layout.settings_card_view, parent, false);        DataObjectHolder dataObjectHolder = new DataObjectHolder(view);        return dataObjectHolder;    }
查看完整描述

2 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

我认为你可以在你的 DataObject 类中做一个在列表或数组中返回所有消息的方法。


// Somewhere in your DataObject class, it's important to add all the messages, even if they are empty

public String[] getAllMessages(){

    return new String[]{messages1, messages2, messages3};

}

然后你可以创建一个 TextView 列表来循环它,比如:


private ArrayList<DataObject> mDataset;

Context context;

//Here your list

private List<TextView> tvList = new ArrayList();


public static class DataObjectHolder extends RecyclerView.ViewHolder {


    public DataObjectHolder(View itemView) {

        super(itemView);

        setting1 = (TextView) itemView.findViewById(R.id.textView);

        setting2 = (TextView) itemView.findViewById(R.id.textView2);


       // Then you add all your TextViews to your list

       tvList.add(setting1); 

       tvList.add(setting2); 

    }

}

然后在你的onBindViewHolder方法中你可以循环你的列表:


@Override

public void onBindViewHolder(DataObjectHolder holder, int position) {

    String[] messages = mDataset.get(position).getAllMessages(); // The method that we just code

    for(int i = 0; i < tvList.size(); i++){

        if(messages[i].isEmpty()){

            tvList.get(i).setVisibility(View.GONE);

        }else{

             tvList.get(i).setVisibility(View.VISIBLE);

             tvList.get(i).setText(messages[i]);

        }

    }

}


查看完整回答
反对 回复 2023-03-17
?
墨色风雨

TA贡献1853条经验 获得超6个赞

就我个人而言,我会从您的 textViews 创建一个数组,并循环遍历所有这些数组。如果他们的文本长度 == 0 隐藏文本视图,否则显示。


如果public void onBindViewHolder()


@Override

public void onBindViewHolder(DataObjectHolder holder, int position) {


    for(TextView textView : textViews) {

        textView.setText("");

        textView.setVisibility(View.GONE);

    }


    int id= mDataset.get(position).getmIndex();

    if (id == 1) {

        holder.setting1.setText(mDataset.get(position).getmText1());

    } else if (id == 2) {

        holder.setting1.setText(mDataset.get(position).getmText1());

        holder.setting2.setText(mDataset.get(position).getmText2());

        holder.setting3.setText(mDataset.get(position).getmText3());

        holder.setting4.setText(mDataset.get(position).getmText4());

        holder.setting5.setText(mDataset.get(position).getmText5());

        holder.setting6.setText(mDataset.get(position).getmText6());

        holder.setting7.setText(mDataset.get(position).getmText7());

        holder.setting8.setText(mDataset.get(position).getmText8());

        holder.setting9.setText(mDataset.get(position).getmText9());

        holder.setting10.setText(mDataset.get(position).getmText10());

    } else if (id == 3) {

        holder.setting1.setText(mDataset.get(position).getmText1());

        holder.setting2.setText(mDataset.get(position).getmText2());

        holder.setting3.setText(mDataset.get(position).getmText3());

        holder.setting4.setText(mDataset.get(position).getmText4());

        holder.setting5.setText(mDataset.get(position).getmText5());

        holder.setting6.setText(mDataset.get(position).getmText6());

        holder.setting7.setText(mDataset.get(position).getmText7());

    } 


    for(TextView textView : textViews) {

        if (textView.getText().length > 0) {

           textView.setVisibility(View.VISIBLE);

        }

    }

}



查看完整回答
反对 回复 2023-03-17
  • 2 回答
  • 0 关注
  • 74 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信