当前位置: 首页 > 知识库问答 >
问题:

recyclerview获取错误的动画

云鸿祯
2023-03-14

我想为recyclerview使用动画,但当为recyclerview使用动画时,强制关闭我的应用程序并显示上下文错误即使我不能在适配器中使用toast如何在适配器中使用动画并解决上下文问题,我放了我的代码,如何能解决我的问题或适配器?请帮助我

public class adapter_zakeran_any extends
    RecyclerView.Adapter<adapter_zakeran_any.ItemViewHolder> {

private Context contex;
private ArrayList<Item_zakerin_any> itemlist;
Item_zakerin_any item;
int pos;
String nameeee;
int DownloadComplete;
//  String file;
public Product product;
String mylink, myname, mynamelist, namemadahi_h, namemadah_h;
public SqliteDatabase mDatabase;
private long Music_DownloadId;
private DownloadManager downloadManager;
String namee;
String file;
View view;


//  private EditText linkFileEdt;
private Intent playerService;
public static TextView namemadahi, onvanmadahi;


public static ImageView download, albumart;

String speaker_name, masir, link, imagee;
MediaMetadataRetriever metaRetriver;
byte[] art;
String flink, shname, shonvane;
SharedPreferences preferences;


int lastPosition = -1;


public adapter_zakeran_any(Context contex, ArrayList<Item_zakerin_any> itemlist) {
    this.contex = contex;
    this.itemlist = itemlist;
}

@Override
public adapter_zakeran_any.ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    view = inflater.from(parent.getContext())
            .inflate(R.layout.cardview_zakeran_any, parent, false);
    adapter_zakeran_any.ItemViewHolder itemViewHolder = new adapter_zakeran_any.ItemViewHolder(view);
    return itemViewHolder;
}

@Override
public void onBindViewHolder(adapter_zakeran_any.ItemViewHolder holder, int position) {

    item = itemlist.get(position);
    nameeee = item.getInfo();


    holder.namemadahi.setText(item.getInfo());
    holder.madah.setText(item.getSpeaker_name());
    holder.link.setText(item.getFile());
    final String ml = (String) holder.link.getText();


    namemadahi_h = (String) holder.namemadahi.getText();
    namemadah_h = item.getSpeaker_name();


    Animation animation = AnimationUtils.loadAnimation(contex, R.anim.item_animation_fall_down);
    holder.itemView.startAnimation(animation);
    lastPosition = position;


}

@Override
public int getItemCount() {
    if (itemlist != null) {
        return itemlist.size();

    }

    return 0;
}


public static class ItemViewHolder extends RecyclerView.ViewHolder {


    public CardView cvItem;
    public TextView namemadahi;
    public TextView madah;
    public TextView link;
    public ImageView download_any_rv;


    public ItemViewHolder(View itemView) {
        super(itemView);

        cvItem = (CardView) itemView.findViewById(R.id.cardView);
        namemadahi = (TextView) itemView.findViewById(R.id.namemadahi);
        madah = (TextView) itemView.findViewById(R.id.madah);


        link = (TextView) itemView.findViewById(R.id.link);
        download_any_rv = (ImageView) itemView.findViewById(R.id.download_anyrv);


    }
}

我的错误

共有1个答案

徐高懿
2023-03-14

您会得到错误,因为当最后一个项目出现时,它会得到null值。

Android.View.Animation.AnimationUtils.LoadAnimation处的java.lang.NullPointerException(AnimationUtils.java:71)

试试看:在适配器类上创建一个方法,并从OnBindViewWholder方法调用

setAnimation(holder.itemView, position);

全局初始化

 // Allows to remember the last item shown on screen
    private int lastPosition = -1; 

以下是完整代码:

        @Override
    public void onBindViewHolder(adapter_zakeran_any.ItemViewHolder holder, int position) {

        item = itemlist.get(position);
        nameeee = item.getInfo();


        holder.namemadahi.setText(item.getInfo());
        holder.madah.setText(item.getSpeaker_name());
        holder.link.setText(item.getFile());
        final String ml = (String) holder.link.getText();


        namemadahi_h = (String) holder.namemadahi.getText();
        namemadah_h = item.getSpeaker_name();

     // Here you apply the animation when the view is bound
        setAnimation(holder.itemView, position);

    }

 /**
     * Here is the key method to apply the animation
     */
    private void setAnimation(View viewToAnimate, int position)
    {
        // If the bound view wasn't previously displayed on screen, it's animated
        if (position > lastPosition)
        {
            Animation animation = AnimationUtils.loadAnimation(context, R.anim.item_animation_fall_down);
            viewToAnimate.startAnimation(animation);
            lastPosition = position;
        }
    }
 类似资料:
  • 我在stackoverflow上读到了几个解决这个问题的问题,但我无法解决我的问题。recyclerview显示网络视图。我的问题是适配器最初加载了正确的值(下图): 但当我向下滚动并再次向上滚动到第一个位置时,webview中会显示错误的值(下图): 我认为这个问题可能源于之前开始加载到webview 中,但我不知道如何处理此行为。以下是我的代码的相关部分: 任何帮助是值得赞赏的。 更新:在我的

  • 我已经实现了一个,可以在其中添加和删除项目。我希望添加的项目添加到第二个位置,并且每当我添加新项目时,动画运行良好。也就是说,最后一个项目向下移动,让新项目的空间淡入。 当我删除一个项目时,有一个问题我不知道如何解决。我希望它的行为是: < li >淡出删除的元素, < li >向上移动它下面的所有项目。 实际发生的事情是,首先,最后一项消失,然后动画的其余部分发生。当已删除元素下方的项目向上移动

  • 获取如下所述的错误: 进程以退出代码1完成。 我的计划是:

  • 知道吗?redisConnectionFactory bean中的主机名是集群的配置endpoint。

  • 我在回收站被击中查看, 这里的名称和平衡字段来自两个不同的数组。我需要的是,这里每一行都有一个EditText字段。我需要访问每一行上的每个EditText。并从中获取值...总计显示在Total text View上。可能吗?我试了很多次。我没有得到它。 我在这里上课。 主要活动 } 数据持有者 } 适配器 }

  • 如何在中获取当前项?在我的用例中,RV项占用了所有屏幕空间,因此一次只有一个项。我以前试过谷歌,但没有找到任何有用的东西。