jad
jad

Reputation: 23

Animation for recyclerview getting Error

I want use animation for recyclerview but when use animation for recyclerview is force close my app and display error for Context even i can not use toast in adapter how to can use animation in adapter and resolve context problem,i put my code ,how to can resolve my problem or adapter?please help me

My Adapter

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);


    }
}

my error

E/AndroidRuntime: FATAL EXCEPTION: main java.lang.NullPointerException at android.view.animation.AnimationUtils.loadAnimation(AnimationUtils.java:71) at com.example.kaveh.zakerinekordestan.adapter_zakeran_any.onBindViewHolder(adapter_zakeran_any.java:103) at com.example.kaveh.zakerinekordestan.adapter_zakeran_any.onBindViewHolder(adapter_zakeran_any.java:34) at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6354) at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6387) at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5343) at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5606) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5448) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5444) at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2224) at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1551) at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1511) at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:595) at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3600) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3329) at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3867) at android.view.View.layout(View.java:14471) at android.view.ViewGroup.layout(ViewGroup.java:4562) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) at android.view.View.layout(View.java:14471) at android.view.ViewGroup.layout(ViewGroup.java:4562) at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076) at android.view.View.layout(View.java:14471) at android.view.ViewGroup.layout(ViewGroup.java:4562) at android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:131) at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42) at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1391) at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:870) at android.view.View.layout(View.java:14471) at android.view.ViewGroup.layout(ViewGroup.java:4562) at android.widget.FrameLayout.onLayout(FrameLayout.java:452) at android.view.View.layout(View.java:14471) at android.view.ViewGroup.layout(ViewGroup.java:4562) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) at android.view.View.layout(View.java:14471) at android.view.ViewGroup.layout(ViewGroup.java:4562) at android.widget.FrameLayout.onLayout(FrameLayout.java:452) at android.view.View.layout(View.java:14471) at android.view.ViewGroup.layout(ViewGroup.java:4562) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) at android.view.View.layout(View.java:14471) at android.view.ViewGroup.layout(ViewGroup.java:4562) at android.widget.FrameLayout.onLayout(FrameLayout.java:452) at android.view.View.layout(View.java:14471) at android.view.ViewGroup.layout(ViewGroup.java:4562) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1986) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1740) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1009) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5508) at android.view.Choreographer$Callba

Upvotes: 1

Views: 504

Answers (1)

Abhishek kumar
Abhishek kumar

Reputation: 4445

You are getting error because when last items comes its getting null value.

java.lang.NullPointerException at android.view.animation.AnimationUtils.loadAnimation(AnimationUtils.java:71)

Try out this : Create a method on your Adapter class and call from OnBindViewHolder method

setAnimation(holder.itemView, position);

initialize globally

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

Here is full Code :

        @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;
        }
    }

Upvotes: 0

Related Questions