Reputation: 23
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
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