Android RecycleView实现
1. 创建布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/btn_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="添加" android:textAllCaps="false"/> <Button android:id="@+id/btn_del" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="删除" android:textAllCaps="false"/> <Button android:id="@+id/btn_list" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="List" android:textAllCaps="false"/> <Button android:id="@+id/btn_grid" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="Grid" android:textAllCaps="false"/> <Button android:id="@+id/btn_flow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="flow" android:textAllCaps="false"/> </LinearLayout> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycle_view" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout>
2. 实例化布局类,为按钮设置点击事件,以及数据集合
import androidx.annotation.Nullable; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.StaggeredGridLayoutManager; import com.atguigu.book.R; import java.util.ArrayList; public class RecycleViewActivity extends Activity implements View.OnClickListener { private Button btnAdd; private Button btnDel; private Button btnList; private Button btnGrid; private Button btnFlow; private RecyclerView recyclerView; private ArrayList<String> data; private MyRecycleViewAdapter adapter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.acticivy_recycleview); initView(); initData(); } private void initData() { data = new ArrayList(); for (int i = 0; i < 100; i++) { data.add("Content".concat(Integer.toString(i))); } } private void initView() { btnAdd = findViewById(R.id.btn_add); btnDel = findViewById(R.id.btn_del); btnList = findViewById(R.id.btn_list); btnGrid = findViewById(R.id.btn_grid); btnFlow = findViewById(R.id.btn_flow); recyclerView = findViewById(R.id.recycle_view); btnAdd.setOnClickListener(this); btnDel.setOnClickListener(this); btnList.setOnClickListener(this); btnGrid.setOnClickListener(this); btnFlow.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_add: adapter.addData(0,"newContent"); recyclerView.scrollToPosition(0); break; case R.id.btn_del: adapter.removeData(0); recyclerView.scrollToPosition(0); break; case R.id.btn_list: recyclerView.setLayoutManager(new LinearLayoutManager( RecycleViewActivity.this, LinearLayoutManager.VERTICAL, false )); break; case R.id.btn_grid: recyclerView.setLayoutManager(new GridLayoutManager( RecycleViewActivity.this, 2, GridLayoutManager.VERTICAL, false )); break; case R.id.btn_flow: recyclerView.setLayoutManager(new StaggeredGridLayoutManager( 3,StaggeredGridLayoutManager.VERTICAL )); break; } } }
3. 准备适配器
import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.atguigu.book.R; import java.util.ArrayList; public class MyRecycleViewAdapter extends RecyclerView.Adapter<MyRecycleViewAdapter.MyViewHolder> { private final Context context; private ArrayList<String> data; public MyRecycleViewAdapter(Context context, ArrayList<String> data) { this.context = context; this.data = data; } @NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View itemView = View.inflate(context, R.layout.item_recycleview,null); return new MyViewHolder(itemView); } @Override public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { String data = this.data.get(position); holder.tvTittle.setText(data); } @Override public int getItemCount() { return data.size(); } public void addData(int position, String data) { this.data.add(position, data); notifyItemInserted(position); } public void removeData(int position) { this.data.remove(position); notifyItemInserted(position); } class MyViewHolder extends RecyclerView.ViewHolder{ private ImageView ivIcon; private TextView tvTittle; public MyViewHolder(@NonNull View itemView) { super(itemView); ivIcon = itemView.findViewById(R.id.iv_logo); tvTittle = itemView.findViewById(R.id.tv_title); } } }
4. 创建itemView布局文件
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/white" android:padding="5dp"> <LinearLayout android:gravity="center" android:padding="5dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#ACA5A5" android:orientation="horizontal"> <ImageView android:id="@+id/iv_logo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/a" /> <TextView android:layout_marginLeft="3dp" android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Content" android:textAllCaps="false" android:textColor="#000" /> </LinearLayout> </RelativeLayout>
5. 主文件创建时实例化adapter属性
initView(); initData(); adapter = new MyRecycleViewAdapter(RecycleViewActivity.this,data); recyclerView.setAdapter(adapter); recyclerView.setLayoutManager(new LinearLayoutManager( RecycleViewActivity.this, LinearLayoutManager.VERTICAL, false ));
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!