添加时出现RecyclerView addInArray错误

编程入门 行业动态 更新时间:2024-10-23 23:21:15
本文介绍了添加时出现RecyclerView addInArray错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

当我在List<OrderList>中添加loadOrdersData()中的任何项目时,都会抛出此错误:

When I add in List<OrderList> any item in loadOrdersData(), it throws this:

D/ViewGroup:调用了addInArray,这= android.support.v7.widget.RecyclerView {41cab8f0 VFED .... .F .... ID 0,0-480,770#7f0c0073 app:id/rv}调用堆栈= java.lang.Throwable:android.view.ViewGroup.addInArray(ViewGroup.java:3786)处的addInArray android.view.ViewGroup.addViewInner(ViewGroup.java:3740)处android.view.ViewGroup.addView(ViewGroup.的android.view.ViewGroup.addView(ViewGroup.java:3509)的java:3564)android.support.v7.widget.ChildHelper的android.support.v7.widget.RecyclerView $ 5.addView(RecyclerView.java:649)的Java. android.support.v7.widget.RecyclerView $ LayoutManager.addView(RecyclerView.java:7073)处的android.support.v7.widget.RecyclerView $ LayoutManager.addViewInt(RecyclerView.java:7115)处的addView(ChildHelper.java:107)在android.support.v7.widget.RecyclerView $ LayoutManager.addView(RecyclerView.java:7061)在android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1428)在android.support.v7.widget.LinearLayoutManager .fill(LinearLayoutManager.ja va:1377)在android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:578)在android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3315)在android.support.v7.widget android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3568)在android.view.View.layout(View.java:15125)在.RecyclerView.dispatchLayout(RecyclerView.java:3124)在android.view.View.layout(View.java:15125)在android.view. android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1197)的ViewGroup.layout(ViewGroup.java:4862)android.view.ViewGroup的android.view.View.layout(View.java:15125) .layout(ViewGroup.java:4862)在android.widget.FrameLayout.layoutChildren(FrameLayout.java:515)在android.widget.FrameLayout.onLayout(FrameLayout.java:450)在android.view.View.layout(View.的android.view.ViewGroup.layout(ViewGroup.java:4862)的java:15125)的android.view.View.layout(View.java)的android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:433) :15125)在android.vi ew.ViewGroup.layout(ViewGroup.java:4862)在android.widget.FrameLayout.layoutChildren(FrameLayout.java:515)在android.widget.FrameLayout.onLayout(FrameLayout.java:450)在android.view.View.layout (View.java:15125)在android.view.ViewGroup.layout(ViewGroup.java:4862)在android.widget.LinearLayout.setChildFrame(LinearLayout.java:1888)在android.widget.LinearLayout.layoutVertical(LinearLayout.java: 1742)在android.widget.LinearLayout.onLayout(LinearLayout.java:1651)在android.view.View.layout(View.java:15125)在android.view.ViewGroup.layout(ViewGroup.java:4862)在android. android.widget.FrameLayout.onLayout(FrameLayout.java:450)的Widget.FrameLayout.layoutChildren(FrameLayout.java:515)android.view.ViewGroup.layout的android.view.View.layout(View.java:15125) (ViewGroup.java:4862)在android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2323)在android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2029)在android.view.ViewRootImpl.doTraversal(ViewRootImpl.java: 1192)在android.view.ViewRootImpl $ TraversalRunnable.run(ViewRootImpl.java:6231)在android.view.Choreographer $ CallbackRecord.run(Choreographer.java:788)在android.view.Choreographer.doCallbacks(Choreographer.java:591)在android.os.Handler.handleCallback(Handler.java:808)上的android.view.Choreographer.doFrame(Choreographer.java:560)在android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:774)在android.os在java.lang.reflect.Method上的.Handler.dispatchMessage(Handler.java:103)在android.os.Looper.loop(Looper.java:193)在android.app.ActivityThread.main(ActivityThread.java:5305)上. com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:824)处java.lang.reflect.Method.invoke(Method.java:515)处的invokeNative(Native Method) dalvik.system.NativeStart.main(本机方法)上的os.ZygoteInit.main(ZygoteInit.java:640)

D/ViewGroup: addInArray been called, this = android.support.v7.widget.RecyclerView {41cab8f0 VFED.... .F....ID 0,0-480,770 #7f0c0073 app:id/rv}call stack = java.lang.Throwable: addInArray at android.view.ViewGroup.addInArray(ViewGroup.java:3786) at android.view.ViewGroup.addViewInner(ViewGroup.java:3740) at android.view.ViewGroup.addView(ViewGroup.java:3564) at android.view.ViewGroup.addView(ViewGroup.java:3509) at android.support.v7.widget.RecyclerView$5.addView(RecyclerView.java:649) at android.support.v7.widget.ChildHelper.addView(ChildHelper.java:107) at android.support.v7.widget.RecyclerView$LayoutManager.addViewInt(RecyclerView.java:7115) at android.support.v7.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:7073) at android.support.v7.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:7061) at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1428) at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1377) at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:578) at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3315) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3124) at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3568) at android.view.View.layout(View.java:15125) at android.view.ViewGroup.layout(ViewGroup.java:4862) at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1197) at android.view.View.layout(View.java:15125) at android.view.ViewGroup.layout(ViewGroup.java:4862) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515) at android.widget.FrameLayout.onLayout(FrameLayout.java:450) at android.view.View.layout(View.java:15125) at android.view.ViewGroup.layout(ViewGroup.java:4862) at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:433) at android.view.View.layout(View.java:15125) at android.view.ViewGroup.layout(ViewGroup.java:4862) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515) at android.widget.FrameLayout.onLayout(FrameLayout.java:450) at android.view.View.layout(View.java:15125) at android.view.ViewGroup.layout(ViewGroup.java:4862) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1888) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1742) at android.widget.LinearLayout.onLayout(LinearLayout.java:1651) at android.view.View.layout(View.java:15125) at android.view.ViewGroup.layout(ViewGroup.java:4862) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515) at android.widget.FrameLayout.onLayout(FrameLayout.java:450) at android.view.View.layout(View.java:15125) at android.view.ViewGroup.layout(ViewGroup.java:4862) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2323) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2029) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1192) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6231) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:788) at android.view.Choreographer.doCallbacks(Choreographer.java:591) at android.view.Choreographer.doFrame(Choreographer.java:560) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:774) at android.os.Handler.handleCallback(Handler.java:808) at android.os.Handler.dispatchMessage(Handler.java:103) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:5305) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640) at dalvik.system.NativeStart.main(Native Method)

我尝试在loadOrdersData()中的setAdapter()之前添加:adapter.notifyDataSetChanged();,但这没有任何意义.有人看到它是由什么引起的吗?

I tried adding: adapter.notifyDataSetChanged(); before setAdapter() in loadOrdersData() but it makes no sense. Does anyone see what it is caused by?

代码如下:

MainActivity:

MainActivity:

public class CourierActivity extends AppCompatActivity { private TableLayout orderTable; private RecyclerView recyclerView; private RecycleAdapter adapter; private List<OrderListItem> listItems; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.courier_main); recyclerView = (RecyclerView) findViewById(R.id.rv); recyclerView.setHasFixedSize(true); recyclerView.setLayoutManager(new LinearLayoutManager(CourierActivity.this)); adapter = new RecycleAdapter(listItems, getApplicationContext()); recyclerView.setAdapter(adapter); loadOrdersData(); } private void loadOrdersData() { RequestQueue queue = Volley.newRequestQueue(this); StringRequest sr = new StringRequest(Request.Method.GET, URL, new Response.Listener<String>() { @Override public void onResponse(String response) { listItems = new ArrayList<>(); try { String rsp = new String(response.getBytes("ISO-8859-1"), "UTF-8"); JSONArray orders = new JSONArray(rsp); for (int i = 0; i < orders.length(); i++) { OrderListItem listItem = new OrderListItem( // .. ); listItems.add(listItem); } adapter = new RecycleAdapter(listItems, getApplicationContext()); recyclerView.setAdapter(adapter); } catch (JSONException | UnsupportedEncodingException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT); } }) { @Override public Map<String, String> getHeaders() throws AuthFailureError { Map<String, String> params = new HashMap<String, String>(); return params; } }; queue.add(sr); } }

OrderListItem:

OrderListItem:

public class OrderListItem { private String name; private String status; private String price; private String courier; public OrderListItem(String name, String status, String price, String courier) { this.name = name; this.status = status; this.price = price; this.courier = courier; } public String getName() { return name; } public String getStatus() { return status;} public String getPrice() { return price; } public String getCourier() { return courier; } }

RecycleAdapter:

RecycleAdapter:

public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.ViewHolder> { private List<OrderListItem> listItems; private Context context; public RecycleAdapter(List<OrderListItem> listItems, Context context) { this.listItems = listItems; this.context = context; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.rv_item, parent, false); return new ViewHolder(v); } @Override public void onBindViewHolder(ViewHolder holder, int position) { OrderListItem listItem = listItems.get(position); holder.TextViewName.setText(listItem.getName()); holder.TextViewStatus.setText(listItem.getStatus()); holder.TextViewPrice.setText(listItem.getPrice()); holder.TextViewCourier.setText(listItem.getCourier()); } @Override public int getItemCount() { int count = 0; if (listItems != null && !listItems.isEmpty()) { count = listItems.size(); } return count; } public class ViewHolder extends RecyclerView.ViewHolder { public TextView TextViewName; public TextView TextViewStatus; public TextView TextViewPrice; public TextView TextViewCourier; public ViewHolder(View itemView) { super(itemView); TextViewName = (TextView) itemView.findViewById(R.id.orderListName); TextViewStatus = (TextView) itemView.findViewById(R.id.orderListStatus); TextViewPrice = (TextView) itemView.findViewById(R.id.orderListPrice); TextViewCourier = (TextView) itemView.findViewById(R.id.orderListCourier); } } }

@ layout/rv_item.xml:

@layout/rv_item.xml:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="schemas.android/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.CardView xmlns:card_view="schemas.android/apk/res-auto" android:layout_margin="@dimen/activity_horizontal_margin" android:layout_height="wrap_content" android:layout_width="match_parent"> <LinearLayout android:padding="@dimen/activity_horizontal_margin" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/orderListName" android:text="Order name" android:textAppearance="@style/Base.TextAppearance.AppCompat.Large" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/orderListStatus" android:text="Status" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/orderListPrice" android:text="Price" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/orderListCourier" android:text="Courier" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> </android.support.v7.widget.CardView> </LinearLayout>

@ layout/main.xml:

@layout/main.xml:

<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="schemas.android/apk/res/android" xmlns:tools="schemas.android/tools" xmlns:app="schemas.android/apk/res-auto" tools:context="com.example.seether.myapplication.CourierActivity" android:background="#fff" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/drawerLayout"> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/rv"/> </android.support.v4.widget.DrawerLayout>

编辑.如果我在listItems中输入自定义数据,则可以完美运行而无需日志警告.

EDIT. Works perfect without log's warnings if I enter custom data into listItems.

推荐答案

不要将 list 对象从活动传递到适配器.而是在适配器中有一个单独的阵列列表. 将您的适配器构造函数更改为此:

Don't pass the list object from activity to adapter. Instead have a separate array list in adapter. Change your adapter constructor to this:

public RecycleAdapter(List<OrderListItem> listItems, Context context) { this.listItems = new ArrayList<>(listItems); this.context = context; }

并且正如Maddy建议的那样,在适配器中使用setMethod传递listitem数组,并将所有项目添加到其中,然后调用notifyDataSetChanged.

And as Maddy suggested use a setMethod in adapter passing the listitem array and adding all items to it and calling notifyDataSetChanged.

我想当您在活动和适配器中不使用相同的listitems对象时,这应该可以解决您的问题.

I guess this should solve your problem when you don't use the same listitems object in activity and adapter.

更多推荐

添加时出现RecyclerView addInArray错误

本文发布于:2023-11-16 18:46:06,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1606862.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:错误   RecyclerView   addInArray

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!