【问题标题】:random amount of textviews on a single cardview not working单个卡片视图上的随机文本视图数量不起作用
【发布时间】:2019-12-20 00:19:07
【问题描述】:

我正在从网页中提取房间数据。房间名称和那个房间里的人。人数发生变化,我需要在单个卡片视图上显示特定房间中的所有人。

我尝试了很多不太好的想法。例如手动创建 16 个单独的文本视图。 16 人是一个房间的最大人数。但是,当 arraylist 没有值时,我得到 null 致命错误。

这是来自 main_activity。

if (!dd.isEmpty()){
    Log.d("anoter check", String.valueOf(dd));
    if (dd.size() != 15){
        int intlvl = dd.size();
        int newlvl = 15 - intlvl +1;
        for (int i =0;i<newlvl;i++) {
            dd.add(" ");
        }
    }

这是来自我的 RecyclerViewAdapter.java

public void onBindViewHolder(ViewHolder holder, final int position) {
    Log.d(TAG, "onBindViewHolder: called.");

    List<String> dd = new ArrayList<>(Arrays.asList(mActionRooms.get(0).split(",")));
    Log.d("anoter check", String.valueOf(dd));
    if (dd.size() != 15){
        int intlvl = dd.size();
        int newlvl = 15 - intlvl +1;
        for (int i =0;i<newlvl;i++) {
            dd.add(" ");
        }
    }
    holder.action_Rooms.setText(dd.get(0));
    holder.action_Rooms1.setText(dd.get(1));
    holder.action_Rooms2.setText(dd.get(2));
    holder.action_Rooms3.setText(dd.get(3));
    holder.action_Rooms4.setText(dd.get(4));
    holder.action_Rooms5.setText(dd.get(5));
    holder.action_Rooms6.setText(dd.get(6));
    holder.action_Rooms7.setText(dd.get(7));
    holder.action_Rooms8.setText(dd.get(8));
    holder.action_Rooms9.setText(dd.get(9));
    holder.action_Rooms10.setText(dd.get(10));
    holder.action_Rooms11.setText(dd.get(11));
    holder.action_Rooms12.setText(dd.get(12));
    holder.action_Rooms13.setText(dd.get(13));
    holder.action_Rooms14.setText(dd.get(14));
    holder.action_Rooms15.setText(dd.get(15));
    holder.action_Players1.setText(mRooms.get(position));}

public ViewHolder(View itemView) {
    super(itemView);
    action_Rooms15 = itemView.findViewById(R.id.action_Rooms);
    action_Rooms14 = itemView.findViewById(R.id.action_Rooms1);
    action_Rooms13 = itemView.findViewById(R.id.action_Rooms2);
    action_Rooms12 = itemView.findViewById(R.id.action_Rooms3);
    action_Rooms11 = itemView.findViewById(R.id.action_Rooms4);
    action_Rooms10 = itemView.findViewById(R.id.action_Rooms5);
    action_Rooms9 = itemView.findViewById(R.id.action_Rooms6);
    action_Rooms8 = itemView.findViewById(R.id.action_Rooms7);
    action_Rooms7 = itemView.findViewById(R.id.action_Rooms8);
    action_Rooms6 = itemView.findViewById(R.id.action_Rooms9);
    action_Rooms5 = itemView.findViewById(R.id.action_Rooms10);
    action_Rooms4 = itemView.findViewById(R.id.action_Rooms11);
    action_Rooms3 = itemView.findViewById(R.id.action_Rooms12);
    action_Rooms2 = itemView.findViewById(R.id.action_Rooms13);
    action_Rooms1 = itemView.findViewById(R.id.action_Rooms14);
    action_Rooms = itemView.findViewById(R.id.action_Rooms15);
    action_Players1 =itemView.findViewById(R.id.action_Players1);
    parentLayout = itemView.findViewById(R.id.parent_layout);}

【问题讨论】:

    标签: java android android-recyclerview android-cardview cardview


    【解决方案1】:

    只需在 RecyclerView 的一项中放一个 TextView

    使用列表提供在适配器中创建文本视图的计数

    每次有新人加入房间时,在列表中添加新数据并调用 notifyDataSetChanged()

    【讨论】:

    • public void onBindViewHolder(ViewHolder holder, final int position) { Log.d(TAG, "onBindViewHolder: called."); for(int i = 0;i dd = new ArrayList(Arrays.asList(mActionRooms.get(i).split(","))); holder.action_Rooms.setText(mActionRooms.get(position)); }
    • 我仍然不知道如何做到这一点。我该如何帮助你?
    猜你喜欢
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多