**RecyclerView的一个简单案例**
RecyclerView在安卓开发中基本上就是当作列表来使用,这个和安卓之前的ListView非常相似。
我们在使用的时候,需要建立一个适配器。这个适配器的类要继承ReclerView这个父类,从而重写以下几个方法:
(1)onCreateViewHolder();
(2)onBindViewHolder();
(3)getItemCount();
在这里我也不过多的讲解RecyclerView的知识点了。网上可以找到很多这样的文章。现在我们就直接看看其具体实现案例,可以更好的感受到RecyclerView的使用方法。
第一个类是MainActivity:
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private RecyclerView recycler_view;
private List fruitList = new ArrayList<>();
private String[] textString=new String[]{“苹果”,“橘子”,“葡萄”,“草莓”,“西瓜”,
“橙子”,“樱桃”,“梨子”,“樱桃”,“桃子”,“菠萝”};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initFruits();
recycler_view=findViewById(R.id.recycler_view);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
recycler_view.setLayoutManager(layoutManager);
FruitAdapter adapter = new FruitAdapter(fruitList);
recycler_view.setAdapter(adapter);
}
private void initFruits() {
for (int i=0;i<FruitPicture.fruit_picture.length;i++){
Fruit fruit=new Fruit(textString[i],FruitPicture.fruit_picture[i]);
fruitList.add(fruit);
}
}
}
第二个类是FruitAdapter :
package com.example.myapplication;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> {
private List mFruitList;
public FruitAdapter (List fruitList){
this.mFruitList = fruitList;
}
@NonNull
@Override
public FruitAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,false);
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull FruitAdapter.ViewHolder holder, int position) {
Fruit fruit = mFruitList.get(position);
holder.fruitImage.setImageResource(fruit.getImageId());
holder.fruitName.setText(fruit.getName());
holder.shop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(holder.itemView.getContext(),"今天很热",Toast.LENGTH_SHORT).show();
Intent intent=new Intent(holder.itemView.getContext(),Shopping.class);
intent.putExtra("img",FruitPicture.fruit_picture[position]);
holder.itemView.getContext().startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return mFruitList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
ImageView fruitImage;
TextView fruitName;
Button shop;
public ViewHolder(@NonNull View itemView) {
super(itemView);
fruitImage = (ImageView) itemView.findViewById(R.id.fruit_image);
fruitName = (TextView) itemView.findViewById(R.id.fruitname);
shop=(Button)itemView.findViewById(R.id.shop);
}
}
}
第三个类Fruit:
package com.example.myapplication;
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;
}
}
第四个类FruitPicture:
package com.example.myapplication;
public class FruitPicture {
static int[] fruit_picture=new int[]{
R.drawable.fruit,
R.drawable.fruit1,
R.drawable.fruit2,
R.drawable.fruit3,
R.drawable.fruit4,
R.drawable.fruit5,
R.drawable.fruit6,
R.drawable.fruit7,
R.drawable.fruit8,
R.drawable.fruit9,
R.drawable.fruit10
};
}
第五个类Shopping:
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class Shopping extends AppCompatActivity {
private ImageView fruit_image;
private Button add_button;
private TextView number;
private Button reduce_button;
private TextView price;
private Button payment;
int num;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shopping);
initView();
initEvent();
}
private void initEvent() {
//设置图片
fruit_image.setImageResource(getData());
//设置购买的数量,增加购买产品的数量
//每点击一次就会数量就会加1
add_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
num++;
String shuliang=String.valueOf(num);
number.setText(shuliang);
int all_price=num*10;
price.setText(String.valueOf(all_price));
}
});
//设置购买的数量,减少购买产品的数量
//每点击一次就会数量就会加1
reduce_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
num--;
if (num<0){
num=0;
Toast.makeText(Shopping.this,"已经不能在减少数量",Toast.LENGTH_SHORT).show();
}
String shuliang=String.valueOf(num);
number.setText(shuliang);
int all_price=num*10;
price.setText(String.valueOf(all_price));
}
});
payment.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String str=price.getText().toString();
Toast.makeText(Shopping.this,"你已经支付了"+str,Toast.LENGTH_SHORT).show();
}
});
}
private void initView() {
fruit_image=findViewById(R.id.fruit_image);
add_button=findViewById(R.id.add_button);
number=findViewById(R.id.number);
reduce_button=findViewById(R.id.reduce_button);
price=findViewById(R.id.price);
payment=findViewById(R.id.payment);
}
//获取MainActivity中数据
public int getData(){
Intent intent=getIntent();
int img_id=intent.getIntExtra("img",0);
return img_id;
}
}
这上面是java代码,接着我们来看看布局文件:
第一个布局文件activity_main:
<androidx.recyclerview.widget.RecyclerView
android:id=”@+id/recycler_view”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”/>
第二个布局文件是activity_shopping:
<?xml version=”1.0″ encoding=”utf-8″?>
<ImageView
android:id="@+id/fruit_image"
android:layout_width="match_parent"
android:layout_height="339dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="20dp">
<Button
android:id="@+id/add_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="增加"
android:textSize="30sp"/>
<TextView
android:id="@+id/number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:textSize="30sp"
android:layout_weight="1"
android:gravity="center"/>
<Button
android:id="@+id/reduce_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="减少"
android:textSize="30sp"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="20dp">
<TextView
android:id="@+id/price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<Button
android:id="@+id/payment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="支付"
android:textSize="30sp"/>
</LinearLayout>
第三个布局文件是fruit_item: <?xml version=”1.0″ encoding=”utf-8″?>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/fruitname"
android:gravity="center_vertical"
android:textSize="49dp"
android:layout_marginLeft="10dp"/>
最后我们来看看最后运行的结果如下: