标签: recycler-adapter

java.lang.IllegalStateException:TextView不能为null(Android/Kotlin)

我的Recycler View有以下ViewHolder类,

inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        private val dateText = itemView.itemDateSummaryList
        private val systolicVal = itemView.systolicValue
        private val diastolicVal = itemView.diastolicValue

        fun update(listItem: SummaryListItemModel) {
            Log.i(TAG, "Update method called " + listItem.date)
            dateText.text = listItem.date
            systolicVal.text = listItem.sysVal.toInt().toString()
            diastolicVal.text = listItem.diasVal.toInt().toString()
        }

    }
Run Code Online (Sandbox Code Playgroud)

但是,当我运行该应用程序时,该dateText.text = listItem.date说法出现错误,

java.lang.IllegalStateException: dateText must not be null
at *****.******.*****.ui.detailview.bloodpressure.SummaryListAdapter$ItemViewHolder.update(SummaryListAdapter.kt:68)
Run Code Online (Sandbox Code Playgroud)

但是listItem.date不是null我已经检查了Log.

android kotlin recycler-adapter android-recyclerview

12
推荐指数
2
解决办法
1万
查看次数

java.lang.IllegalStateException:已在池中

在回收物品时,我在回收者视图上的产品上遇到这种奇怪的崩溃,而且我也无法重现此崩溃。

  Fatal Exception: java.lang.IllegalStateException: Already in the pool!
   at androidx.core.util.Pools$SimplePool.release(Pools.java:117)
   at androidx.recyclerview.widget.AdapterHelper.recycleUpdateOp(AdapterHelper.java:743)
   at androidx.recyclerview.widget.AdapterHelper.recycleUpdateOpsAndClearList(AdapterHelper.java:750)
   at androidx.recyclerview.widget.AdapterHelper.consumePostponedUpdates(AdapterHelper.java:123)
   at androidx.recyclerview.widget.AdapterHelper.consumeUpdatesInOnePass(AdapterHelper.java:557)
   at androidx.recyclerview.widget.RecyclerView.processAdapterUpdatesAndSetAnimationFlags(RecyclerView.java:3585)
   at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:3829)
   at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3639)
   at androidx.recyclerview.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1877)
   at androidx.recyclerview.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:5044)
   at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1092)
   at android.view.Choreographer.doCallbacks(Choreographer.java:893)
   at android.view.Choreographer.doFrame(Choreographer.java:809)
   at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1078)
   at android.os.Handler.handleCallback(Handler.java:891)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:207)
   at android.app.ActivityThread.main(ActivityThread.java:7539)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter android-recyclerview

12
推荐指数
1
解决办法
647
查看次数

何时在RecycleView适配器中调用getItemCount()方法?

我有一个填充数据的适配器RecyclerView.

我没有打电话notifyDataSetChanged(),我在Fragment 中将适配器设置为RecyclerViewin onCreateView()(所以getItemCount()应该调用一次),但我发现getItemCount()多次调用.

android recycler-adapter android-recyclerview

11
推荐指数
0
解决办法
2371
查看次数

对于屏幕外项目,RecyclerView findViewHolder为null

[第一次提问者和第一次安卓编码器所以我道歉,如果我做错了什么]

我正在尝试更改我的回收器上的itemview内部的值.但是,如果该项目视图恰好在屏幕外,则findViewBy [布局,适配器或ID]将显示为null.

public void setUserActive(UserListAdapter adapter, RecyclerView recyclerView, int position, View v) {recyclerView.findViewHolderForItemId(adapter.getItemId(position));
    TextView txtActive = (TextView) vh.itemView.findViewById(R.id.user_isActive);
    txtActive.setText("Active");
    UserListAdapter.ViewHolder inactivevh = (UserListAdapter.ViewHolder) recyclerView.findViewHolderForItemId(adapter.getItemId(adapter.getActiveUserPosition()));
    TextView txtInActive = (TextView) inactivevh.itemView.findViewById(R.id.user_isActive);
    txtInActive.setText("");
    adapter.setActiveUserPosition(position);
}
Run Code Online (Sandbox Code Playgroud)

我尝试了几种不同的方法,从使用

  UserListAdapter.ViewHolder vh = (UserListAdapter.ViewHolder) recyclerView.findViewHolderForLayoutPosition(position);
Run Code Online (Sandbox Code Playgroud)

要么

UserListAdapter.ViewHolder inactivevh = (UserListAdapter.ViewHolder) recyclerView.findViewHolderForAdapterPosition(position)
Run Code Online (Sandbox Code Playgroud)

当应该处于inactivevh的视图关闭时,它们都会失败.

我已将适配器设置为hasStableIDs = true notifydatasetchanged似乎也没有帮助.

android recycler-adapter android-recyclerview

11
推荐指数
1
解决办法
7286
查看次数

11
推荐指数
2
解决办法
3万
查看次数

GridLayout和LinearLayout都在一个RecyclerView中

任何想法如何LayoutManager在一个视图中使用两个不同的?我在屏幕和底部的顶格四张牌,我想LinearLayout,但RecyclerView一次显示一个视图

RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(this, 2);
recyclerView.setLayoutManager(mLayoutManager);
RecyclerView.LayoutManager lmLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(lmLayoutManager);
recyclerView.addItemDecoration(new GridSpacingDashboard(2, dpToPx(2), true));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以在单个RecyclerView或者在索引OI上使用两个视图,GridLayout并且在1上显示LinearLayout,如果有任何可能性,如何实现

更新(卡适配器)

    public class CardAdapter extends RecyclerView.Adapter<adapter.CardAdapter.CardViewHolder> {

        public static final int topGridCard = 0;
        public static final int bottomCards=1;

        private Context mContext;
        private List<CardModel> cardList;

        public CardAdapter(Context mContext, List<CardModel> cardList) {
            this.mContext = mContext;
            this.cardList = cardList;
        }

        @Override
        public.adapter.CardAdapter.CardViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View …
Run Code Online (Sandbox Code Playgroud)

android android-layout recycler-adapter android-recyclerview

11
推荐指数
1
解决办法
3794
查看次数

将单击侦听器设置为RecyclerView

我使用RecyclerView适配器来显示活动内部的数据,我想onClickListener在活动内部实现,目前,我onClickListener正常设置内部适配器,工作正常.

public void onBindViewHolder(MyHolder holder, final int position) {
    final Listdata data = listdata.get(position);
    holder.vname.setText(data.getName());

    holder.vname.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(activity, "clicked on " +position, Toast.LENGTH_SHORT).show();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

但是我想在活动中实现它,所以我有更大的控制权.这不符合我的目的.我认为这对我们很多人都有用.

java android gridview recycler-adapter android-recyclerview

11
推荐指数
5
解决办法
1万
查看次数

我可以将ViewModel传递给RecyclerView适配器并观察LiveData吗?

我开始实施MVVM,我不知道是否使用ViewModel内部我Adapter是一个良好的实践或AntiPattern.

举个例子,考虑一下颜色列表和一个你将改变背景的图像.在这种情况下,我正在观察所选的颜色并绑定背景颜色以在UI中显示.

但是我在两个地方观察颜色选择:

  • Fragment为了改变背景颜色
  • Adapter显示中选择哪种颜色

所以,MVVM当我通过并观察ViewModel到时,我是否正确使用Adapter

data-binding android mvvm recycler-adapter

11
推荐指数
1
解决办法
1539
查看次数

notifyItemRangeChanged()导致崩溃RecyclerView Android

版图设计:

HorizontalScrollView-parent, holding RV[
    RecyclerView=>(GridLayoutManager) (orientation verticle)]
Run Code Online (Sandbox Code Playgroud)

哪个基本上会做双向滚动.此UI适用于电视.此网格中的焦点行将显示额外的细节,而其他行则不会.所以,每当有从一行的焦点变化到另一个onFocusChange我修改datasetAdapter,并调用notifyItemRangeChanged().

当行长度超过屏幕的垂直长度,即垂直可滚动时,这可以正常工作.发生崩溃就像是行数较少(如4).

错误:

    java.lang.IllegalArgumentException: parameter must be a descendant of this view
at android.view.ViewGroup.offsetRectBetweenParentAndChild(ViewGroup.java:5937)
at android.view.ViewGroup.offsetDescendantRectToMyCoords(ViewGroup.java:5866)
at android.widget.HorizontalScrollView.isWithinDeltaOfScreen(HorizontalScrollView.java:1168)
at android.widget.HorizontalScrollView.onSizeChanged(HorizontalScrollView.java:1569)
at android.view.View.sizeChange(View.java:19719)
at android.view.View.setFrame(View.java:19680)
at android.view.View.layout(View.java:19583)
at android.view.ViewGroup.layout(ViewGroup.java:6053)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1780)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1546)
at android.view.View.layout(View.java:19586)
at android.view.ViewGroup.layout(ViewGroup.java:6053)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
at android.view.View.layout(View.java:19586)
at android.view.ViewGroup.layout(ViewGroup.java:6053)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
at android.view.View.layout(View.java:19586)
at android.view.ViewGroup.layout(ViewGroup.java:6053)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1080)
at android.view.View.layout(View.java:19586)
at android.view.ViewGroup.layout(ViewGroup.java:6053)
at …
Run Code Online (Sandbox Code Playgroud)

android horizontalscrollview gridlayoutmanager recycler-adapter android-recyclerview

11
推荐指数
1
解决办法
458
查看次数

RecyclerView仅在滚动时更新

我有一个RecyclerView带适配器的布局:

public class SimpleRecyclerAdapter extends RecyclerView.Adapter<SimpleViewHolder> {

  protected List<JSONObject> data = new ArrayList<>();

  public List<JSONObject> getData() { return data; }
}     
Run Code Online (Sandbox Code Playgroud)

我更新它的适配器,如:

public void udpdateFromJson( JSONObject payload ) {
  JSONArray msgs = payload.optJSONArray( "messages" );
  for( int ix = 0; null != msgs && ix < msgs.length(); ix++ ){
    JSONObject o = msgs.optJSONObject( ix );
    if( loadingMore ) adapter.getData().add( 1 + ix, o );
    else adapter.getData().add( o );
  }

  adapter.notifyDataSetChanged();
  recyclerView.invalidate();
}
Run Code Online (Sandbox Code Playgroud)

问题是,只有当我触摸或滚动视图时才会看到新项目.

我错过了什么?

更新:

解决问题我更换了线

adapter.notifyDataSetChanged();
recyclerView.invalidate(); …
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter android-recyclerview

10
推荐指数
2
解决办法
2407
查看次数