功能要求
1.在上一个界面中的微信发现tab页面中添加RecyclerView,以新闻列表页面为例
2.在该基础上进行点击跳转设计,即点击某一行能够跳转到新闻详情页面。
设计流程
创建适配器RecyclerView.Adapter
package com.example.work; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.view.LayoutInflater; 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 java.io.File; import java.util.List; public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.Myviewholder> { private List<String> mlist; private Context context; public RecyclerViewAdapter(Context context, List<String> list) { this.mlist=list; this.context=context; } @NonNull @Override public Myviewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view=(View) LayoutInflater.from(parent.getContext()).inflate(R.layout.item,parent,false); Myviewholder myviewholder=new Myviewholder((view)); return myviewholder; } @Override public void onBindViewHolder(@NonNull Myviewholder holder, int position) { holder.textView1.setText("联系人"+(position+1)); holder.textView2.setText(mlist.get(position)); holder.textView2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent=new Intent(context,ItemActivity.class); context.startActivity(intent); } }); } @Override public int getItemCount() { return mlist.size(); } public class Myviewholder extends RecyclerView.ViewHolder{ TextView textView1,textView2; public Myviewholder(@NonNull View itemView) { super(itemView); textView1=itemView.findViewById(R.id.textView1); textView2=itemView.findViewById(R.id.textView2); } }
创建Adapter类,可将数据绑定到recycleview中对应的Item上
public class MyAdapter extends RecyclerView.Adapter <MyAdapter.MyViewHolder>{
//定义存储数据和运行环境的变量
private List<Map<String,Object>> mydata;
private Context mycontext;
//获取数据和运行环境
public MyAdapter(List<Map<String,Object>> data, Context context){
mydata=data;
mycontext=context;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view= LayoutInflater.from(mycontext).inflate(R.layout.fra_lx_two_item,parent,false);
MyViewHolder holder=new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull MyAdapter.MyViewHolder holder, int position) {
//获取点击位置的对应数据
String name=mydata.get(position).get("i_name").toString();
int image=Integer.parseInt(mydata.get(position).get("i_image").toString());
//将此数据显示到item中
holder.textView.setText(name);
holder.imageView.setImageResource(image);
}
@Override
public int getItemCount() {
return mydata.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private TextView textView;
private ImageView imageView;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
//获取item中的控件id
textView=itemView.findViewById(R.id.text_hhh);
imageView=itemView.findViewById(R.id.image_hhh);
}
}
}
adpter适配器在原本的基础上加上监听事件的功能
package com.example.work; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import java.util.List; public class Adapter extends RecyclerView.Adapter <Adapter.Myholder>{ private View view; private Context context; private List<String> list; public Adapter(Context context, List<String> list) { this.context = context; this.list=list; } @NonNull @Override public Myholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { view= LayoutInflater.from(context).inflate(R.layout.item,parent); Myholder holder; holder=new Myholder(view); return holder; } @Override public void onBindViewHolder(@NonNull Myholder holder, int position) { holder.textView.setText(list.get(position)); } @Override public int getItemCount() { return list.size(); } public class Myholder extends RecyclerView.ViewHolder{ private TextView textView; public Myholder(@NonNull View itemView) { super(itemView); textView=itemView.findViewById(R.id.textView2); } } }
设置adapter和LayoutManager.
public class weixinFragment extends Fragment { private RecyclerView recyclerView; private Context context; private List<String> list = new ArrayList<>(); private Myadapter myAdapter; public weixinFragment() { } //初始化数据 private void init_Data() { list.add("武汉eStarPro"); list.add("重庆狼队"); list.add("南京Hero久竞"); list.add("北京WB"); list.add("成都AG超玩会"); list.add("深圳DYG"); } private void init_View() { context=this.getActivity(); Myadapter myAdapter = new Myadapter(context); //获取recyclerView recyclerView = recyclerView.findViewById(C.id.recyclerView); //设置LayoutManager,设置显示效果,这里选择横向 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context); linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);//纵向只需将HORIZONTAL改为VERTICAL即可 recyclerView.setLayoutManager(linearLayoutManager); recyclerView.setHasFixedSize(true); recyclerView.setAdapter(myAdapter); myAdapter.Data_List(list); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // 获取fragment的Layout View view=inflater.inflate(R.layout.tab01, container, false); recyclerView=view.findViewById(R.id.recyclerView); init_Data(); init_View(); return view; } }
结果展示
实验心得
本次实验学会了用recyclerview创建一个列表,把它添加到页面中,并实现点击页面跳转。虽然本慈实验属于RecycleView最基础的范畴,但由于本人并非计算机专业,因而遇到了不小困难。但我还是很高兴可以学到专业课以外的知识。