list
=
new
ArrayList
<
>
(
)
;
for
(
int
i
=
0
;
i
<
10
;
i
++
)
{
list
.
add
(
String
.
valueOf
(
i
)
)
;
recyclerview_list
=
findViewById
(
R
.
id
.
recyclerview_list
)
;
recyclerview_list
.
setLayoutManager
(
new
CardManager
(
this
)
)
;
mAdapter
=
new
CardAdapter
(
list
)
;
recyclerview_list
.
setAdapter
(
mAdapter
)
;
-
然后我在回调方法中去remove list集合中的数据
if (list != null && list.size() != 0) {
list.remove(position);
mAdapter.notifyDataSetChanged();
- 我把数据传给了adapter,按理说应该去adapter里操作apapter中接收到的list(mCardBeenList)才有效果,对吧?
private List mCardBeenList;
private Context mContext;
public CardAdapter(List cardBeenList) {
mCardBeenList = cardBeenList;
- 重点来了,我在MainActivity中操作list,CardAdapter的mCardBeenList,就会自己变化。
- 查了资料(https://www.cnblogs.com/sinjin/articles/11250803.html),
- 大概意思是list不重新new,就可以。
- 那么这个问题也就解答了:我们只是将list传给CardAdapter,在CardAdapter里并没有重新new对象,实际上还指向的是MainActivity中new出来的那个list内存地址
- 而CardAdapter中的 mCardBeenList 只是从那个内存地址里取数据,所以会相应的改变。
- 突然想起了C语言,让我泪流满面啊。。。
今天遇到这样一个问题:在MainActivity中,我正常使用recyclerview,并传入new好的list数据集给adapter。 //MainActivity list = new ArrayList<>(); for (int i = 0; i < 10; i++) { list.add(String.valueOf(i)); } recyclerview_list = findViewByI.
先上效果图:RecyclerView简介:RecyclerView用以下两种方式简化了数据的展示和处理:
1. 使用LayoutManager来确定每一个item的排列方式。
2. 为增加和删除项目提供默认的动画效果,也可以自定义。RecyclerView项目结构如下:
Adapter:使用RecyclerView之前,你需要一个继承自RecyclerView.Adapter的适配器
最近在开发一个简单的安卓app。有很长一段
时间没用安卓了,引入jetpack之后开发变化很大。在参考了google自己出的RecycleView教程之后,满以为可以使用RecycleView不会出现什么问题了。
想不到该来的还是来了。话说一番操作之后做了一个扫描连接设备的界面,但是发生了一下奇怪的事情。
按下刷新按钮,RecycleView不出现任何新的item。但是如果我按一下editText的框,然后就出现了。为了便于理解问题的根源,我想简单交代一下目前更新RecycleView的方法。
@Subscribe
public void onReceiveClasses(ClassEvent classEvent) {
// this.classEntities = classEvent.classEntities;//直接重新赋值是行不通的,因为引用的问题,需要通过后面这样的方式来进行
this.classEntities.clear();
目录1 前言2 正文2.1 基本使用2.2 问题解决3 最后
在查看 google 的开源项目 sunflower 时看到使用到了 ListAdapter,开始以为是之前对应 ListView 的那个 ListAdapter,实际上是 recyclerview 库里提供的。自己也就跟着使用到了项目中。当然,经历了一些问题后,才比较好地掌握了 ListAdapter 的正确使用方法。
本文主要会回答如下的问题:
为什么提供同样引用的集合给 ListAdapter后,没有任何反映?
为什么使用 Li
RecyclerView.Adapter代码可以根据具体需求进行编写,以下是一个简单的示例:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private List<String> mData;
public MyAdapter(List<String> data) {
mData = data;
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
return new ViewHolder(view);
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.mTextView.setText(mData.get(position));
@Override
public int getItemCount() {
return mData.size();
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView mTextView;
public ViewHolder(View itemView) {
super(itemView);
mTextView = itemView.findViewById(R.id.text_view);
这个示例中,我们定义了一个 MyAdapter 类,它继承自 RecyclerView.Adapter,并且泛型参数为 ViewHolder。在构造函数中,我们传入了一个 List<String> 类型的数据,这个数据将会在 RecyclerView 中显示。
在 onCreateViewHolder 方法中,我们通过 LayoutInflater 来加载 item_layout 布局文件,并返回一个 ViewHolder 对象。
在 onBindViewHolder 方法中,我们将数据绑定到 ViewHolder 中的 TextView 上。
在 getItemCount 方法中,我们返回数据的数量。
最后,我们定义了一个 ViewHolder 类,它包含一个 TextView 对象,用于显示数据。