第一行代码RecyclerView的基本用法的问题

鄱湖听风 2018-07-03 12:18:45
首先,加载RecyclerView需要定义一个实体类。定义一个Fruit。
public class Fruit {
private String name;
private int imageId;
public Fruit(String name,int imageId)
{
this.name=name;
this.imageId=imageId;
}
public String getName()
{
return name;
}
public int getImageId()
{
return imageId;
}

然后需要自定义布局,再然后需要一个适配器
public  class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> {
private List<Fruit> mFruitList;
static class ViewHolder extends RecyclerView.ViewHolder
{
View fruitView;
ImageView fruitImage;
TextView fruitName;
public ViewHolder(View view)
{
super(view);
fruitView=view;
fruitImage=(ImageView)view.findViewById(R.id.fruit_image);
fruitName=(TextView)view.findViewById(R.id.fruit_name);

}
}
public FruitAdapter(List<Fruit> fruitList)
{
mFruitList=fruitList;
}
@Override
public FruitAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,false);
final ViewHolder holder=new ViewHolder(view);
holder.fruitView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int possition=holder.getAdapterPosition();
Fruit fruit =mFruitList.get(possition);
Toast.makeText(view.getContext(),"you cicked view"+fruit.getName(),Toast.LENGTH_SHORT).show();
}
});
holder.fruitImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int possition=holder.getAdapterPosition();
Fruit fruit =mFruitList.get(possition);
Toast.makeText(view.getContext(),"you cicked image"+fruit.getName(),Toast.LENGTH_SHORT).show();
}
});
return holder;
}

@Override
public void onBindViewHolder(FruitAdapter.ViewHolder holder, int position) {
Fruit fruit=mFruitList.get(position);
holder.fruitImage.setImageResource(fruit.getImageId());
holder.fruitName.setText(fruit.getName());

}

@Override
public int getItemCount() {
return mFruitList.size();
}
}
我想知道:为什么适配器需要Fruit这个类,这个类的数据是怎么传入适配器的
...全文
443 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yx__ 2018-07-12
  • 打赏
  • 举报
回复
就想问问 你这代码谁教的 谁告诉你这样写的
Aln_ 2018-07-11
  • 打赏
  • 举报
回复
首先你的知道这个RececleView 在Android 里面的应用场景 , 举个例子 淘宝的商品列表 有好几个商品 比如 衣服A 衣服B 衣服C 等 而这些衣服都有共同的 属性比如 价格 图片 文字描述 (Java语言是面向对象的 衣服就好比对象 价格 图片 文字描述 就是这个对象的属性)

RececleView 有自己的适配器 Adapter Adapter 会加载你指定的layout ,这个layout 里面就是你要显示的属性(价格 图片 文字描述等 )
辣条优惠券 2018-07-11
  • 打赏
  • 举报
回复
适配器需要Fruit这个类是为了让适配器绑定Fruit实体类里面的数据,Fruit的数据是通过这个方法传入适配器的:
public FruitAdapter(List<Fruit> fruitList)
{
mFruitList=fruitList;
}
YXTS122 2018-07-05
  • 打赏
  • 举报
回复
楼主的这个适配器代码怎么是这样写的,我第一次见,受教了
boson__ 2018-07-04
  • 打赏
  • 举报
回复
引用 2 楼 qq_38595145 的回复:
是不是适配器就应该这样写,我有点搞不懂,如果我想要搞懂我应该知道哪方面的知识?

适配器的写法是根据你需求的业务逻辑决定的。关键在于 extends RecyclerView.Adapter<FruitAdapter.ViewHolder>
我想知道:为什么适配器需要Fruit这个类,这个类的数据是怎么传入适配器的
List<Fruit> fruitList = new arrayList();
fruitList.add()....
在FruitAdapter初始化的时候 new FruitAdapter(fruitList);
楼主仔细看一下自己的代码。
zhuailhw123 2018-07-04
  • 打赏
  • 举报
回复
楼主可以先学习下java 等有点基础 看起来就容易了
i風 2018-07-03
  • 打赏
  • 举报
回复
引用 2 楼 qq_38595145 的回复:
是不是适配器就应该这样写,我有点搞不懂,如果我想要搞懂我应该知道哪方面的知识?


最好先熟悉一下,面向对象的思想,封装继承与多态,接口构造器
dark_liang 2018-07-03
  • 打赏
  • 举报
回复
楼主是不是刚开始接触java语言,适配器不是必须要这样写的,你这样写大概只是为了更好的理解适配器的构造流程吧,recycleview的适配器必须重写的有两个方法oncreateview 和 onbindview 其他的可以不用重写,recycleview帮你复用了viewhold所以你只要继承了recycleview的viewhold就可以了,你最好去看看recycleview的使用方式,java的基础知识你也不是很懂吧,java构造器你也去看看就知道为啥能够吧参数传进来了
鄱湖听风 2018-07-03
  • 打赏
  • 举报
回复
是不是适配器就应该这样写,我有点搞不懂,如果我想要搞懂我应该知道哪方面的知识?
Jing丶無雙 2018-07-03
  • 打赏
  • 举报
回复
楼主是否没有一点儿Java基础
Fruit这个实体类的确可以不要,或者说Fruit这个类名是随意自定义的, 需要的是 name和 imageId这两个成员变量,举个例子:
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
for (int i = 0; i < 5; i++) {// 初始化数据
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "name" + (i + 1));
map.put("imageId", i + 1);
list.add(map);
}
for (int i = 0; i < list.size(); i++) {// 取出数据
String name = list.get(i).get("name").toString();
int imageId = (int) list.get(i).get("imageId");
System.out.println(name);
System.out.println(imageId);
}

我这里通过Map键值对来存放name和 imageId这两个成员变量,这就比直接操作包含name和 imageId的Fruit这个实体类麻烦一些

另外一点
 public FruitAdapter(List<Fruit> fruitList)
{
mFruitList=fruitList;
}

这里 实例化适配器FruitAdapter的时候,不就通过构造函数mFruitList=fruitList;把数据传入适配器了么

80,472

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧