编程语言
首页 > 编程语言> > java-以编程方式在卡片项目内设置textview属性会导致随机修改卡片

java-以编程方式在卡片项目内设置textview属性会导致随机修改卡片

作者:互联网

我的目标是通过编程方式更改某些Cardview中Textview项目的文本大小,这些Cardviews包含在recyclerview中.我能够成功地做到这一点,而且有不寻常的副作用.然后发生的事情是,尽管正确地修改了正确的cardviews的textview的属性,但现在修改了原本不应修改的随机卡片.但是,随着用户滚动浏览越来越多的recyclerview,两个方向上的卡片越来越多.最终,从一些随机卡(除了我的请求卡)开始,导致所有电话被修改.

一个更好的例子:假设我有5张卡,我想在包含50张卡的recyclerview中将文本大小更改为其他内容.现在,这些卡片以及其他一些随机卡片现在都带有大文字.其余的保持很小.随着用户上下滚动,越来越多的卡片被设置为具有大文本,直到所有卡片都具有大文本为止.

我的代码的工作方式是,我有一个类ListAdapter,它扩展了RecyclerView.Adapter< ListAdapter.VersionViewHolder>.由于我从数据库中收集对象,因此我使用数组列表收集信息,并以编程方式将其添加到其中,如下所示:

@Override
public void onBindViewHolder(VersionViewHolder versionViewHolder, int i) {
    if (ActivitiesList.size() != 0)
        versionViewHolder.title.setText(ActivitiesList.get(i));
    if (ActivitiesSubList.size() != 0)
        versionViewHolder.subTitle.setText(ActivitiesSubList.get(i));
    if (ActivitiesSubList2.size() != 0)
        versionViewHolder.subTitle2.setText(ActivitiesSubList2.get(i));
    if (ActivitiesID.size() != 0)
        versionViewHolder.id.setText(ActivitiesID.get(i));

    // TODO: POST QUESTION ON STACK OVERFLOW
    if (!ActivitiesTag.get(i).equals("")) {
        Log.d("CardPos", Integer.toString(versionViewHolder.getAdapterPosition()));
        versionViewHolder.title.setTextSize(TypedValue.COMPLEX_UNIT_SP, 56);
    }

}

我在扩展ListAdapter的子类GradesListAdapter中设置了ActivitiesList,ActivitiesSubList,ActivitiesSubList2,ActivitiesID和ActivitiesTag.

应该注意的是ActivitiesTag Arraylist.当我希望添加一个较大的值时,我只需将任何非空值插入arraylist中即可.否则,我添加一个空字符串.因此,要使其很大,它必须成功满足标准. (附带说明,是否有任何方法可以改进此方法?)在测试中,似乎只有位置正确的纸牌被设置为大号,但它仍然会影响未标记的纸牌.

这是VersionViewHolder类:

class VersionViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    CardView cardItemLayout;
    TextView title;
    TextView subTitle;
    TextView subTitle2;
    TextView id;

    public VersionViewHolder(View itemView) {
        super(itemView);
        cardItemLayout = (CardView) itemView.findViewById(R.id.grades_item);
        title = (TextView) itemView.findViewById(R.id.listitem_name);
        subTitle = (TextView) itemView.findViewById(R.id.listitem_subname);
        subTitle2 = (TextView) itemView.findViewById(R.id.listitem_subname2);
        id = (TextView) itemView.findViewById(R.id.listitem_id);
        itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        clickListener.onItemClick(v, getAdapterPosition());
    }
}

我该怎么办才能消除这种意外的副作用?我相信我拥有其他人需要的所有数据来帮助调试它,但是如果我丢失了某些东西,请这样说.我对StackOverflow还是很陌生.

感谢您的阅读.

解决方法:

在您的onbindViewHolder中,更改

if (!ActivitiesTag.get(i).equals("")) {
    Log.d("CardPos", Integer.toString(versionViewHolder.getAdapterPosition()));
    versionViewHolder.title.setTextSize(TypedValue.COMPLEX_UNIT_SP, 56);
}

if (!ActivitiesTag.get(i).equals("")) {
    Log.d("CardPos", Integer.toString(versionViewHolder.getAdapterPosition()));
    versionViewHolder.title.setTextSize(TypedValue.COMPLEX_UNIT_SP, 56);
}else{
    versionViewHolder.title.setTextSize(TypedValue.COMPLEX_UNIT_SP,"Your Original Text Size");
}

如果仅在viewholder中设置if子句而没有else子句,则由于该视图会被一次又一次地重用,因此您的文本大小将不会重置为普通大小.因此,您必须手动重置文本大小.

标签:android-recyclerview,android-cardview,java,android
来源: https://codeday.me/bug/20191028/1949737.html