Android开发-类微信界面设计(二)

本文介绍了如何在Android开发中完善RecyclerView,添加点击效果,实现在列表中跳转到详情页面,并处理返回操作。还涉及数据绑定、列表创建、Adapter使用以及Intent在组件间通信中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android开发-类微信界面设计(二)

一实现效果图

二、功能说明:

在上次实验的基础之上把recycleviewb列表完善并且增加点击效果,点击之后可以跳转到另外一个activity上,并且添加返回按钮,可以放回原列表页面,列表中的每一行都对应的不同的数据

故需要实现的功能

1:activity之间的跳转

2:数据的绑定

三、功能实现

1:列表创建

涉及到如下xml文件:

需要用到recycleview控件创建列表

recycleview

RecyclerView是Android中用于展示大量数据列表的高级视图组件。它是对ListView的改进和扩展,提供了更灵活、高效的方式来展示和管理大型数据集。

recycleview是一个列表,接下来创建行item

设计item.xml

头像+姓名 故添加2个控件

功能为点击行之后跳转出个人的详情页面

details_people.xml设计

四个控件显示

1:姓名

2:电话

3:地址

4:朋友圈

加一个button返回值列表

显示xml文件设计全部完成,接下来需要连接数据即后端

2:连接数据

存储数据

往列表里面传入数据,先要创建数据源,在fragment1.java里创建list列表进行数据存储

  List<Map<String,Object>> items=new ArrayList<Map<String,Object>>();

创建一个列表,列表的内容为键值对 键的内容为string ,值的内容为任意类型

每一个map对象都是一个联系人,里面存储着ta的信息

通过for循环存入数据

 for(int i=0;i<names.length;i++){
            Map<String,Object> item=new HashMap<String, Object>();
            item.put("i_name",names[i]);
            item.put("i_image",images[i]);
            item.put("i_phone",phones[i]);
            item.put("i_region",regions[i]);
            item.put("i_tag",tags[i]);
            items.add(item);
        }

数据传入之后进行连接,把数据导入进列表

需要用到adapter

绑定数据

Adapter

是数据源和视图之间的桥梁,把数据绑定到item里

里面有一个叫Holder的类,和一个onBindViewHolder的方法

Holder

在Adapter中,holder用于绑定视图

 public class Myholder extends RecyclerView.ViewHolder{

        public ImageView imageView;
        TextView textView;

        public Myholder(@NonNull View itemView) {
            super(itemView);
            textView=itemView.findViewById(R.id.name);//引用item.xml里id为textView1的textView作为Myholder这个类中
            imageView = (ImageView) itemView.findViewById(R.id.image);
            //textView对象的初始值
        }
    }

如上:这个holder类绑定了item.xml的控件image和textview(他们的id分别是image和name)

image-20231111153328419

onBindViewHolder

这个方法是把数据集中的数据绑定到控件中

  • 1:数据绑定

name通过list位置position的不同自动获取不同的数据(position会自动变化)

image-20231111153911926

  • 2:设置跳转事件

当点击textview控件也就是我们的name时,这个onclick函数就会响应

这里有一个intent类

Intent

Intent用于组件之间的通信和交互可以启动其他的activity,service,broadcastRecever等组件

可以

  1. 启动组件:通过创建一个Intent对象并指定要启动的组件的类名或动作,可以启动其他应用程序中的Activity、Service或BroadcastReceiver组件。例如,你可以使用Intent启动一个新的Activity来显示一个新的界面。
  2. 传递数据:Intent可以携带数据,以便在组件之间进行传递。你可以使用putExtra()方法将额外的数据附加到Intent中,然后在目标组件中使用getXXXExtra()方法获取这些数据。数据可以是基本类型(如字符串、整数等),也可以是复杂的对象。
  3. 发送广播:通过创建一个Intent并指定广播的动作,你可以发送广播消息,使得其他应用程序中的BroadcastReceiver组件可以接收并处理该广播。广播可以用于应用程序内部的通信,也可以用于应用程序间的通信。
  4. 打开系统功能:Intent可以用于打开系统功能,如拨打电话、发送短信、打开浏览器等。系统会根据Intent的内容选择合适的应用程序来处理请求。
  holder.textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //点击后跳转到联系人详情页
                Intent intent=new Intent(context1,Activitypeople.class);
                //向intent传值
                intent.putExtra("details",name);
                intent.putExtra("image",image);
                intent.putExtra("phone",phone);
                intent.putExtra("region",region);
                intent.putExtra("tag",tag);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                //开始跳转
                context1.startActivity(intent);
            }
        });

这段代码就用了intent的2个功能

1:启动组件,当点击name时,从本组件跳到了activitypeople这个组件

Intent intent=new Intent(context1,Activitypeople.class);

2:数据传送,把detail,image,phone等数据放到了intent这个对象里面

intent.putExtra("details",name);
                intent.putExtra("image",image);
                intent.putExtra("phone",phone);
                intent.putExtra("region",region);
                intent.putExtra("tag",tag);

最后从Madapter.java跳转至ActivityPeople.java

这是一个activity 连接着details_people.xml

也就是一个item对应的一个people的详情页面

details_people.xml的效果图如下:

故ActivityPeople.java中要对这个效果进行数据的绑定展示,相当数据库后端

  • 与xml文件绑定
super.onCreate(savedInstanceState);
setContentView(R.layout.details_people);
  • 创建xml效果有的控件:
   TextView dName,textView1,textView2;
    ImageView dImage,aImage,cImage,pImage;
    Button button_r;
    View view;
  • 绑定控件
 dName=findViewById(R.id.dname);
 dImage=findViewById(R.id.imagename);
 aImage=findViewById(R.id.imageadd);
 cImage=findViewById(R.id.imagecircle);
 pImage=findViewById(R.id.imagephone);
 textView1=findViewById(R.id.dphone);
 textView2=findViewById(R.id.dadd);
  • 获取从上一个activity传递过来的带有数据的intent类
//获取上一个Actvity传过来的intent
Intent intent=getIntent();
  • 设置控件获取数据
dImage.setImageResource(intent.getIntExtra("image",R.drawable.baba));
dName.setText(intent.getStringExtra("details"));
aImage.setImageResource(R.drawable.weizhi);
cImage.setImageResource(R.drawable.circle);
pImage.setImageResource(R.drawable.dianhua);
textView1.setText(intent.getStringExtra("phone"));
textView2.setText(intent.getStringExtra("region"));
  • button实现返回到原来的activity效果

跳转到原来的Fragment1页面

button_r.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent1=new Intent(Activitypeople.this, MainActivity.class);
                startActivity(intent1);
            }
        });

startActivity

通过调用startActivity()方法,你可以向系统发出请求,以启动另一个Activity并在屏幕上显示相应的界面。

这种启动是没有返回值的

如果要有放回值的启动需要用到launch的启动

summary

问题:

q1:详情页面效果时,地址、朋友圈等图像无法显示

因为这些image都是固定的,而不是根据position变化而变化的,上网查找发现在onBindViewHolder()方法中,为ImageView设置固定图像资源时,不使用position参数获取列表项的位置对应的图像资源,而是直接定义获取图像资源如下:

 cImage=findViewById(R.id.imagecircle);
 cImage.setImageResource(R.drawable.circle);

而根据position变化而变的图像、文字连接:

dName=findViewById(R.id.dname);
dName.setText(intent.getStringExtra("details"));

q2:效果显示时地址无法显示

查看代码后发现 绑定数据时region单词拼写错误,导致地址数据无法绑定完成

q3:网上无法找到大小一致的图片

前期使用的是网上随便找的图片,导致设计xml文件时,格式无法控制,效果显示不佳

后面询问同学得知可以在iconfont-阿里巴巴矢量图标库内进行图标选取,这个库里面的图大小基本一致并且数量种类丰富,可以免费使用

android开发对于我来说是一种全新的体验,遇到的困难很多,同时带来的锻炼也是巨大的,收益匪浅,通过一个个解决困难的过程,感觉到了自己在一步步成长
源码地址

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值