Android 找到Linearlayout的View并在recycleradapter中设置背景
Android findView of Linearlayout and set background in recycleradapter
我有一个带有 RecyclerView 的 LinearLayout xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/r1"
android:background="#DBDBDB">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#DBDBDB" />
</LinearLayout>
在我的 java class 中,我正在设置整个 Linearlayout 的背景图像:
LinearLayout linear;
linear = findViewById(R.id.r1);
linear.setBackgroundResource(R.drawable.visitedbg);
这工作正常。但我也想在 Recycleradapter 中为 Linearlayout 设置背景。
在列表中,用户可以通过单击删除任何项目。如果最后一项被删除,我想显示背景图片。
在onBindViewHolder
方法中我有:
movieList.remove(position);notifyDataSetChanged();
if (getItemCount()<=0){holder.linear.setBackgroundResource(R.drawable.visitedbg);}
问题是 Nullpointerexception,因为我无法在 Recycleradapter 中定义 LinearLayout 视图。
我试着把它放到public MyviewHolder(View itemView)
,也是public RecyclerAdapter.MyviewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
as
LinearLayout linear = itemView.findViewById(R.id.r1);
但这仍然不起作用。有解决办法吗?
首先,我建议从 findViewById() 迁移到 viewBindng 以防止应用程序在 运行 时间内崩溃。
其次,您只能从适配器访问 recyclerView 项目内的视图。要实现你想要的,你应该监听 recyclerView 的适配器更改。您可以使用 AdapterDataObserver:
adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
@Override
public void onItemRangeRemoved(int positionStart, int itemCount) {
super.onItemRangeRemoved(positionStart, itemCount);
//...
}
});
查看 android 文档中的 this link。
实现此目的的另一种方法是在每次删除元素时检查适配器的项目数:
movieList.remove(position);
notifyItemRemoved(position);
if(adapter.getItemCount() == 0)
linear.setBackgroundResource(R.drawable.visitedbg)
我有一个带有 RecyclerView 的 LinearLayout xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/r1"
android:background="#DBDBDB">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#DBDBDB" />
</LinearLayout>
在我的 java class 中,我正在设置整个 Linearlayout 的背景图像:
LinearLayout linear;
linear = findViewById(R.id.r1);
linear.setBackgroundResource(R.drawable.visitedbg);
这工作正常。但我也想在 Recycleradapter 中为 Linearlayout 设置背景。
在列表中,用户可以通过单击删除任何项目。如果最后一项被删除,我想显示背景图片。
在onBindViewHolder
方法中我有:
movieList.remove(position);notifyDataSetChanged();
if (getItemCount()<=0){holder.linear.setBackgroundResource(R.drawable.visitedbg);}
问题是 Nullpointerexception,因为我无法在 Recycleradapter 中定义 LinearLayout 视图。
我试着把它放到public MyviewHolder(View itemView)
,也是public RecyclerAdapter.MyviewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
as
LinearLayout linear = itemView.findViewById(R.id.r1);
但这仍然不起作用。有解决办法吗?
首先,我建议从 findViewById() 迁移到 viewBindng 以防止应用程序在 运行 时间内崩溃。 其次,您只能从适配器访问 recyclerView 项目内的视图。要实现你想要的,你应该监听 recyclerView 的适配器更改。您可以使用 AdapterDataObserver:
adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
@Override
public void onItemRangeRemoved(int positionStart, int itemCount) {
super.onItemRangeRemoved(positionStart, itemCount);
//...
}
});
查看 android 文档中的 this link。
实现此目的的另一种方法是在每次删除元素时检查适配器的项目数:
movieList.remove(position);
notifyItemRemoved(position);
if(adapter.getItemCount() == 0)
linear.setBackgroundResource(R.drawable.visitedbg)