
并且
想知道,这是创建DataAapter引用的正确方法吗?
DataAdapter dataadaper; (完整代码如下)
如果不是那么怎么样?
使用此代码(下面给出)我的应用程序在打开时崩溃,想知道我做错了什么,这样我就可以从错误中吸取教训. :) 谢谢
public class DataAdapter extends RecyclerVIEw.Adapter<DataAdapter.VIEwHolder> {public static String Camp_ID[] = new String[15];private ArrayList<AndroIDVariables> androID;private Context context;AnimatorSet set;DataAdapter dataAdapterString url = "_URL";public DataAdapter(ArrayList<AndroIDVariables> androID) { this.context = context; this.androID = androID; if (OffersFragment.srl.isRefreshing()) { OffersFragment.srl.setRefreshing(false); }}@OverrIDepublic DataAdapter.VIEwHolder onCreateVIEwHolder(VIEwGroup vIEwGroup,int i) { if (androID.get(i).getCamp_ID().equals("1")) { VIEw vIEw = LayoutInflater.from(vIEwGroup.getContext()).inflate(R.layout.item_List_offer_big,vIEwGroup,false); return new VIEwHolder(vIEw); } VIEw vIEw = LayoutInflater.from(vIEwGroup.getContext()).inflate(R.layout.item_List,false); return new VIEwHolder(vIEw);}@OverrIDepublic int getItemVIEwType(int i) { return i;}public voID myNotifyDataSetChanged(){ this.notifyDataSetChanged();}@OverrIDepublic voID onBindVIEwHolder(VIEwHolder vIEwHolder,int i) { Context context = vIEwHolder.p_img.getContext(); vIEwHolder.p_name.setText(androID.get(i).getname()); vIEwHolder.p_quant.setText(androID.get(i).getVer()); vIEwHolder.p_cat.setText(androID.get(i).getAPI()); vIEwHolder.p_earn.setText("₹" + androID.get(i).getCash()); Camp_ID[i] = androID.get(i).getCamp_ID(); Picasso.with(context).load(url + androID.get(i).getimage()).into(vIEwHolder.p_img); dataAdapter.myNotifyDataSetChanged();}@OverrIDepublic int getItemCount() { return androID.size();}public class VIEwHolder extends RecyclerVIEw.VIEwHolder { private TextVIEw p_name,p_quant,p_cat,p_earn; private ImageVIEw p_img,plus; public VIEwHolder(VIEw vIEw) { super(vIEw); p_name = (TextVIEw) vIEw.findVIEwByID(R.ID.List_product); p_quant = (TextVIEw) vIEw.findVIEwByID(R.ID.List_quantity); p_cat = (TextVIEw) vIEw.findVIEwByID(R.ID.List_category); p_earn = (TextVIEw) vIEw.findVIEwByID(R.ID.earning); p_img = (ImageVIEw) vIEw.findVIEwByID(R.ID.List_productimg); plus = (ImageVIEw) vIEw.findVIEwByID(R.ID.plusoffers); plus.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw v) { plus.setimageResource(R.drawable.check_small); //DO_ANY_THING } }); }}} LOG
04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: FATAL EXCEPTION: main04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: Process: earn.free.cashback,PID: 2435704-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'voID earn.free.cashback.DataAdapter.myNotifyDataSetChanged()' on a null object reference04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at earn.free.cashback.DataAdapter.onBindVIEwHolder(DataAdapter.java:94)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at earn.free.cashback.DataAdapter.onBindVIEwHolder(DataAdapter.java:30)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.support.v7.Widget.RecyclerVIEw$Adapter.onBindVIEwHolder(RecyclerVIEw.jav a:5453) 04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.support.v7.Widget.RecyclerVIEw$Adapter.bindVIEwHolder(RecyclerVIEw.java: 5486)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.support.v7.Widget.RecyclerVIEw$Recycler.getVIEwForposition(RecyclerVIEw. java:4723)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.support.v7.Widget.RecyclerVIEw$Recycler.getVIEwForposition(RecyclerVIEw. java:4599)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.support.v7.Widget.linearlayoutmanager$LayoutState.next(linearLayoutManag er.java:1988)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.support.v7.Widget.linearlayoutmanager.layoutChunk(linearlayoutmanager.ja va:1384)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.support.v7.Widget.linearlayoutmanager.fill(linearlayoutmanager.java:1347 )04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.support.v7.Widget.linearlayoutmanager.onLayoutChildren(linearLayoutManag er.java:574)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.support.v7.Widget.RecyclerVIEw.dispatchLayoutStep2(RecyclerVIEw.java:300 3)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.support.v7.Widget.RecyclerVIEw.dispatchLayout(RecyclerVIEw.java:2881)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.support.v7.Widget.RecyclerVIEw.onLayout(RecyclerVIEw.java:3265)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.vIEw.VIEw.layout(VIEw.java:15671)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.vIEw.VIEwGroup.layout(VIEwGroup.java:5038)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.support.v4.Widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:59 6)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.vIEw.VIEw.layout(VIEw.java:15671)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.vIEw.VIEwGroup.layout(VIEwGroup.java:5038)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.Widget.FrameLayout.layoutChildren(FrameLayout.java:579)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.Widget.FrameLayout.onLayout(FrameLayout.java:514)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.vIEw.VIEw.layout(VIEw.java:15671)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.vIEw.VIEwGroup.layout(VIEwGroup.java:5038)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.Widget.FrameLayout.layoutChildren(FrameLayout.java:579)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.Widget.FrameLayout.onLayout(FrameLayout.java:514)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.vIEw.VIEw.layout(VIEw.java:15671)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.vIEw.VIEwGroup.layout(VIEwGroup.java:5038)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.Widget.FrameLayout.layoutChildren(FrameLayout.java:579)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.Widget.FrameLayout.onLayout(FrameLayout.java:514) 04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.vIEw.VIEw.layout(VIEw.java:15671)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.vIEw.VIEwGroup.layout(VIEwGroup.java:5038)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.support.design.Widget.CoordinatorLayout.layoutChild(CoordinatorLayout.ja va:1087)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.support.design.Widget.CoordinatorLayout.onLayoutChild(CoordinatorLayout. java:797)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.support.design.Widget.CoordinatorLayout.onLayout(CoordinatorLayout.java: 811)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.vIEw.VIEw.layout(VIEw.java:15671)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.vIEw.VIEwGroup.layout(VIEwGroup.java:5038)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.support.v4.vIEw.VIEwPager.onLayout(VIEwPager.java:1695)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.vIEw.VIEw.layout(VIEw.java:15671)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.vIEw.VIEwGroup.layout(VIEwGroup.java:5038)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.support.design.Widget.headerScrollingVIEwBehavior.layoutChild(headerScro llingVIEwBehavior.java:122)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.support.design.Widget.VIEwOffsetBehavior.onLayoutChild(VIEwOffsetBehavio r.java:42)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.support.design.Widget.AppbarLayout$ScrollingVIEwBehavior.onLayoutChild(A ppbarLayout.java:1149)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.support.design.Widget.CoordinatorLayout.onLayout(CoordinatorLayout.java: 810)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.vIEw.VIEw.layout(VIEw.java:15671)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.vIEw.VIEwGroup.layout(VIEwGroup.java:5038)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.support.v4.Widget.DrawerLayout.onLayout(DrawerLayout.java:1187)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.vIEw.VIEw.layout(VIEw.java:15671)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.vIEw.VIEwGroup.layout(VIEwGroup.java:5038)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.Widget.FrameLayout.layoutChildren(FrameLayout.java:579)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.Widget.FrameLayout.onLayout(FrameLayout.java:514)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.vIEw.VIEw.layout(VIEw.java:15671)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.vIEw.VIEwGroup.layout(VIEwGroup.java:5038)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.Widget.linearLayout.setChildFrame(linearLayout.java:1703)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.Widget.linearLayout.layoutVertical(linearLayout.java:1557)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.Widget.linearLayout.onLayout(linearLayout.java:1466)04-02 02:17:11.820 24357-24357/? E/AndroIDRuntime: at androID.vIEw.VIEw.l解决方法 Shadab的信息是正确的,但是关于初始化,我建议从DataAdapter类中删除dataAdapter变量并将其添加到您打算访问它的活动中;在onCreate()中初始化它.
public voID onCreate(Bundle savedInstanceState) { //Initialize data set myAndroIDData = new ArrayList<>(); //Initialize data adapter and assign it to a recycler vIEw myDataAdapter = new DataAdapter(myAndroIDData); myRecyclerVIEw = (RecyclerVIEw) findVIEwByID(R.ID.recycler_vIEw); myRecyclerVIEw.setAdapter(myDataAdapter); super.onCreate(savedInstanceState);} 在myAndroIDData中添加或删除项目后,请调用myDataAdapter.notifyDataSetChanged();刷新你的显示器.
由于notifyDataSetChanged()是父级RecyclerVIEw类中的公共函数,因此不需要myNotifyDataSetChanged()函数,可以将其删除.避免在创建适配器后调用myAndroIDData = new ArrayList< AndroIDVariables>(),因为dataAdapter.androID仍会引用您初始化它的列表,而notifyDataSetChanged()将不再按您的意愿工作.
还建议您不要从onBindVIEwHolder()调用notifyDataSetChanged(). onBindVIEwHolder只应用于设置视图持有者中显示的内容,而不能用于设置RecyclerVIEw本身.
将onBindVIEwHolder()函数更新为
@OverrIDepublic voID onBindVIEwHolder(VIEwHolder vIEwHolder,int i) { Context context = vIEwHolder.p_img.getContext(); vIEwHolder.p_name.setText(androID.get(i).getname()); vIEwHolder.p_quant.setText(androID.get(i).getVer()); vIEwHolder.p_cat.setText(androID.get(i).getAPI()); vIEwHolder.p_earn.setText("₹" + androID.get(i).getCash()); Camp_ID[i] = androID.get(i).getCamp_ID(); Picasso.with(context).load(url + androID.get(i).getimage()).into(vIEwHolder.p_img);} 总结 以上是内存溢出为你收集整理的android – 想要实现notifyDataSetChanged或autorefresh到我的RecyclerView但它无法正常工作全部内容,希望文章能够帮你解决android – 想要实现notifyDataSetChanged或autorefresh到我的RecyclerView但它无法正常工作所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)