一、实验目的
掌握ListView控件和Recyclerview的基本使用方式。
掌握使用ArrayAdapter、SimpleAdapter、BaseAdapter实现填充数据。
二、实验指导
1、写UI界面 xml文件 ListView
2、寻找ListView(初始化)
3、实现ListView的数据适配器adapter
4、给listView设置adapter
5、将模拟器运行结果截图到word文档中,并将核心代码复制到word文档中。
三、实验内容
实验题目 ListView或Recyclerview控件结合适配器的使用
实现如下效果:
任务要求:
使用ListView或Recyclerview控件结合适配器的使用实现类似学习强国界面效果。其中自定义的item界面效果及素材等资源可自己发挥。
四、模拟器效果截图
五、源代码
- MyRecyAdapter
package cs.qqq.qqq.adapter;
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 java.util.List;
import cs.qqq.qqq.R;
import cs.qqq.qqq.beans.PInfo;
public class MyRecyAdapter extends RecyclerView.Adapter<MyRecyAdapter.ViewHolder>{
private List<PInfo> pInfoList;
private Context context;
private int layoutid;
public MyRecyAdapter(List<PInfo> pInfoList, Context context, int layoutid) {
this.pInfoList = pInfoList;
this.context = context;
this.layoutid = layoutid;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i) {
//加载条目布局文件,返回holder对象
View view=View.inflate(context,layoutid,null);
ViewHolder holder=new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
//将数据设置给holder对应的控件上
viewHolder.imageView.setImageResource(pInfoList.get(i).getPicon());
viewHolder.textView.setText(pInfoList.get(i).getPdesc());
viewHolder.textView1.setText(pInfoList.get(i).getContent());
viewHolder.textView2.setText(pInfoList.get(i).getReal_time());
}
@Override
public int getItemCount() {
return pInfoList.size();
}
class ViewHolder extends RecyclerView.ViewHolder{
private ImageView imageView;
private TextView textView;
private TextView textView1;
private TextView textView2;
public ViewHolder(@NonNull View itemView){
super(itemView);
imageView=itemView.findViewById(R.id.imageView);
textView=itemView.findViewById(R.id.textView);
textView1=itemView.findViewById(R.id.textView1);
textView2=itemView.findViewById(R.id.textView2);
}
}
}
2.PInfo
package cs.qqq.qqq.beans;
import java.util.Date;
public class PInfo {
private int picon;
private String pdesc;
private String content;
private String real_time;
public String getReal_time() {
return real_time;
}
public void setReal_time(String real_time) {
this.real_time = real_time;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public int getPicon() {
return picon;
}
public void setPicon(int picon) {
this.picon = picon;
}
public String getPdesc() {
return pdesc;
}
public void setPdesc(String pdesc) {
this.pdesc = pdesc;
}
}
3.MRecyclerActivity
package cs.qqq.qqq;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.format.DateFormat;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import cs.qqq.qqq.adapter.MyRecyAdapter;
import cs.qqq.qqq.beans.PInfo;
public class MRecyclerActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private List<PInfo> pInfoList=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mrecycler);
recyclerView=findViewById(R.id.recycler);
initData();
//设置一下布局方式
// 垂直线性布局
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
//添加分割线
recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
//设置适配器
MyRecyAdapter recyAdapter=new MyRecyAdapter(pInfoList,this,R.layout.list_item);
recyclerView.setAdapter(recyAdapter);
}
private void initData() {
for(int i=0;i<1;i++){
PInfo p1=new PInfo();
p1.setPicon(R.drawable.meigui);
p1.setPdesc("***");
p1.setContent("***");
p1.setReal_time("2023-3-30 星期四");
pInfoList.add(p1);
PInfo p2=new PInfo();
p2.setPicon(R.drawable.baihe);
p2.setPdesc("百合");
p2.setContent("百合是百合科百合属植物。地下根茎为鳞状块茎,广展,无明显结节,白色;茎有紫色条纹,无毛");
p2.setReal_time("2023-3-30 星期四");
pInfoList.add(p2);
PInfo p3=new PInfo();
p3.setPicon(R.drawable.lanmeigui);
p3.setPdesc("蓝玫瑰");
p3.setContent("蓝玫瑰不是自然生长的,因此必须经过特别染色,以呈现其独有的蓝色");
p3.setReal_time("2023-3-30 星期四");
pInfoList.add(p3);
}
}
}
4.activity_mrecycler.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MRecyclerActivity">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="0dp"
android:layout_height="match_parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:id="@+id/recycler"/>
</androidx.constraintlayout.widget.ConstraintLayout>
5.list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp">
<ImageView
android:id="@+id/imageView"
android:layout_width="130dp"
android:layout_height="140dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="13dp"
android:scaleType="fitXY"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/meigui" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="44dp"
android:layout_marginLeft="44dp"
android:text="玫瑰"
android:textSize="25sp"
app:layout_constraintStart_toEndOf="@+id/imageView"
app:layout_constraintTop_toTopOf="@+id/imageView" />
<TextView
android:id="@+id/textView1"
android:layout_width="226dp"
android:layout_height="0dp"
android:layout_marginLeft="15dp"
android:layout_marginTop="15dp"
android:text="text1111111111111111111111111111111111111111111111111111"
android:textSize="15sp"
app:layout_constraintStart_toEndOf="@+id/imageView"
app:layout_constraintTop_toBottomOf="@+id/textView"
tools:ignore="MissingConstraints" />
<TextView
android:id="@+id/textView2"
android:layout_width="145dp"
android:layout_height="21dp"
android:layout_marginTop="10dp"
android:text="2023-3-30"
app:layout_constraintStart_toStartOf="@+id/textView1"
app:layout_constraintTop_toBottomOf="@+id/textView1"
tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>