目录

一、设计目标

二、功能实现

点击实现详情页码的跳转

点击实现回传值效果

三、运行效果

四、源码仓库地址


一、设计目标

1、实现对Activity生命周期的理解,使用log展示生命周期的状态变化;
2、在(一)的基础上增加列表项的单项点击功能,具体要求是:新建一个新的activity1,recycleview的某一项点击后跳转到这个新的activity1;
3、实现最新的activityforresult功能,具体要求是:新建一个新的activity2,在activity1上添加按钮可收到activity2的回传值。

二、功能实现

点击实现详情页码的跳转

1、recycleview的实现:

主要是把recycleview合入第一次作业框架的fragment中,实现tab页的列表项。主要增加了配置文件item.xml以及相对应的适配器Myadapter.java文件,并在原来的fragment2中进行相应功能的修改实现。

效果展示:

Fragment2.java

package com.example.myapplication;import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;import java.util.ArrayList;
import java.util.List;public class Fragment2 extends Fragment {private RecyclerView recyclerView;//声明recyclerViewprivate Context context;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragment//添加数据List<String> list=new ArrayList<>();for(int i=1;i<=28;i++){list.add("联系人 "+i);}View view;view=inflater.inflate(R.layout.tab02, container, false);recyclerView=view.findViewById(R.id.recyclerView);//设置分割线recyclerView.addItemDecoration(new DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL));Context context=getContext();//获得Activity的contextMyadapter myadapter=new Myadapter(context,list);recyclerView.setAdapter(myadapter);LinearLayoutManager layoutManager=new LinearLayoutManager(context);layoutManager.setOrientation(LinearLayoutManager.VERTICAL);recyclerView.setLayoutManager(layoutManager);return view;}
}

注:recyclerView不会在屏幕上摆放列表项,所以要通过LayoutManger去摆放列表项。

用List来存放数据

Myadapter.java

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.ImageView;
import android.widget.TextView;import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;import java.util.List;public class Myadapter extends RecyclerView.Adapter<Myadapter.Myholder> {private View view;private Context context;private List<String> list;public Myadapter(Context context, List<String> list) {this.context = context;this.list=list;}//指针holder@NonNull@Overridepublic Myholder onCreateViewHolder(@NonNull ViewGroup parent, int i) {view= LayoutInflater.from(context).inflate(R.layout.item,parent,false);//把item这个xml压缩成一个viewMyholder holder=new Myholder(view);//通过view传给构造函数Myholderholder.textView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent(context,MainActivity1.class);context.startActivity(intent);}});return holder;}//压缩了一个view@Overridepublic void onBindViewHolder(@NonNull Myholder holder, int position) {holder.textView.setText(list.get(position));//控件与对应的data对应}//给view一个对应list数据@Overridepublic int getItemCount() {return list.size();}//显示数据列表的大小,控制recyclerView的行数//找到行文件中对应的控件变量public class Myholder extends RecyclerView.ViewHolder{private TextView textView;private ImageView imageView;public Myholder(@NonNull View itemView) {super(itemView);textView=itemView.findViewById(R.id.item_textView);//通过findViewById找到textView这个控件}}
}

注:在tab02.xml中直接拖入了一个recycleview控件,在adapter的onCreateViewHolder()中,将ViewHolder构造方法中的ItemView抽象成一个方法,外部只需要自己ItemView就行。通过setOnClickListener实现对列表项的点击监听,并且用intent来实现activity的页面跳转。

item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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="60dp"><ImageViewandroid:id="@+id/item_imageView"android:layout_width="15dp"android:layout_height="match_parent"android:layout_weight="1"app:srcCompat="@mipmap/picture" /><TextViewandroid:id="@+id/item_textView"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_weight="1"android:text="列表某一行"android:textSize="35sp" />
</LinearLayout>

2、跳转到MainActivity1(即联系人详情页面):

跳转后的详情页面效果如下:

activity_main1.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=".MainActivity1"><TextViewandroid:id="@+id/a1_textView"android:layout_width="0dp"android:layout_height="wrap_content"android:text="这是联系人详情界面"android:textColor="@color/purple_200"android:gravity="center"android:textSize="40sp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><LinearLayoutandroid:id="@+id/linearLayout"android:layout_width="0dp"android:layout_height="84dp"android:layout_marginTop="16dp"android:orientation="horizontal"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.0"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/a1_textView"><ImageViewandroid:id="@+id/imageView"android:layout_width="40dp"android:layout_height="match_parent"android:layout_weight="1"app:srcCompat="@mipmap/picture" /><LinearLayoutandroid:layout_width="146dp"android:layout_height="match_parent"android:layout_weight="1"android:orientation="vertical"><TextViewandroid:id="@+id/a1_textView5"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="昵称"android:textSize="30sp" /><TextViewandroid:id="@+id/a1_textView6"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="微信号"android:textSize="30sp" /></LinearLayout><ImageButtonandroid:id="@+id/imageButton"android:layout_width="27dp"android:layout_height="wrap_content"android:layout_weight="1"app:srcCompat="@android:drawable/btn_star_big_on"tools:ignore="SpeakableTextPresentCheck" /></LinearLayout><TextViewandroid:id="@+id/a1_textView1"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginTop="28dp"android:text="朋友权限"android:textSize="35sp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.0"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/linearLayout" /><TextViewandroid:id="@+id/a1_textView2"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginTop="8dp"android:text="朋友圈"android:textSize="35sp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.0"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/a1_textView1" /><TextViewandroid:id="@+id/a1_textView3"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginTop="84dp"android:gravity="center"android:text="发消息"android:textSize="40sp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.0"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/a1_textView1" /><TextViewandroid:id="@+id/a1_textView4"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginTop="8dp"android:gravity="center"android:text="音视频通话"android:textSize="40sp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="1.0"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/a1_textView3" /><TextViewandroid:id="@+id/a1_textView8"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginStart="30dp"android:layout_marginEnd="30dp"android:text="返回信息"android:textColor="@color/purple_200"android:gravity="center"android:textSize="35sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/a1_textView4" /></androidx.constraintlayout.widget.ConstraintLayout>

点击实现回传值效果

对MainActivity1中的控件imagebutton实现点击监听,通过点击收到activity2的回传值(具体为点击实现将联系人设置为星标朋友的回传值);用activityforresult来实现该功能,其中直接调用launch()方法,并把Intent传入。

MainActivity1.java

package com.example.myapplication;import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;public class MainActivity1 extends AppCompatActivity {private ImageButton imageButton;private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main1);textView=findViewById(R.id.a1_textView8);imageButton=findViewById(R.id.imageButton);imageButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent(MainActivity1.this,MainActivity2.class);test.launch(intent);}});}public ActivityResultLauncher test= registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),new ActivityResultCallback<ActivityResult>() {@Overridepublic void onActivityResult(ActivityResult result) {if(result.getResultCode()==28){Log.d("ik","onActivityResult 有返回值。。。");textView.setText(result.getData().getStringExtra("data"));};}});@Overrideprotected void onStart() {super.onStart();Log.d("ik","这是MainActivity1的生命周期,onStart..");}@Overrideprotected void onPause() {super.onPause();Log.d("ik","这是MainActivity1的生命周期,onPause..");}@Overrideprotected void onPostResume() {super.onPostResume();Log.d("ik","这是MainActivity1的生命周期,onPostResume..");}@Overrideprotected void onRestart() {super.onRestart();Log.d("ik","这是MainActivity1的生命周期,onRestart..");}@Overrideprotected void onStop() {super.onStop();Log.d("ik","这是MainActivity1的生命周期,onStop..");}@Overrideprotected void onDestroy() {super.onDestroy();Log.d("ik","这是MainActivity1的生命周期,onDestroy..");}
}

注:用intent来确定的是从哪到哪,即从MainActivity1的context到MainActivity2.class

MainActivity2.java

package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;
import android.os.Bundle;import java.util.Calendar;public class MainActivity2 extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);Intent intent=new Intent();//信息封装传值intent.putExtra("data","你已将该联系人设置为星标朋友。\n"+ Calendar.getInstance().getTime());setResult(28,intent);finish();}@Overrideprotected void onStart() {super.onStart();Log.d("ik","这是MainActivity2的生命周期,onStart..");}@Overrideprotected void onPause() {super.onPause();Log.d("ik","这是MainActivity2的生命周期,onPause..");}@Overrideprotected void onPostResume() {super.onPostResume();Log.d("ik","这是MainActivity2的生命周期,onPostResume..");}@Overrideprotected void onRestart() {super.onRestart();Log.d("ik","这是MainActivity2的生命周期,onRestart..");}@Overrideprotected void onStop() {super.onStop();Log.d("ik","这是MainActivity2的生命周期,onStop..");}@Overrideprotected void onDestroy() {super.onDestroy();Log.d("ik","这是MainActivity2的生命周期,onDestroy..");}
}

注:用finish()函数结束activity2,被调的activity2结束后才会有回调结果

三、运行效果

1、activity的跳转及点击得到回传值:

2、log展示生命周期的状态变化:

说明:运行后,MainActivity1进行onCreate、onStrart、onPostResume;点击button跳转到MainActivity2,MainActivity1进行onPause,MainActivity2进行onCreate、onStrart、onPostResume;点击返回键,MainActivity2回传值并onDestroy。

四、源码仓库地址

manul: andriod studio - Gitee.com

Android类微信(二)相关推荐

  1. Android——类微信界面设计

    移动开发技术1 设计类微信APP门户界面,包含4个tab切换效果 1.页面分为上中下三部分:分别为标题,显示内容,切换按钮: 2.底部选择框发生改变时,中间显示内容也发生相对应的改变: 导入相关文件 ...

  2. android 类微信相册

    开源项目 https://github.com/wqandroid/wqgallery https://github.com/pengjianbo/GalleryFinal 转载于:https://w ...

  3. Android 基于google Zxing实现二维码 条形码扫描,仿微信二维码扫描效果

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 转载请注 ...

  4. 安卓 类微信开发(二)

    目录 一.主要内容 二.核心代码 三.效果展示 在UI的基础上: 安卓 类微信界面开发(一)_qingsongxyz的博客-CSDN博客 一.主要内容 对聊天主界面chatFragement进行完善, ...

  5. Android Studio类微信界面之RecyclerView设计

    目录 一.RecyclerView基本概念 二.前端页面设计 item_dome.xml tab01.xml 三.后端代码 VerticalAdapter.java weixinfragment.ja ...

  6. Android 集成微信支付和支付宝支付工具类

    Android 集成微信支付和支付宝支付工具类 1.前言 去年年底接了一个商城app 外包项目,里面尼涉及到 微信和支付宝支付,这里我整理出几个工具类,下面就和大家分享一下,废话不多说,下面我一步一步 ...

  7. Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/10163203 了解二维码这个东西还是从微信中,当时微信推出二维码扫描功能,自己感觉挺新 ...

  8. Android开发-UI界面--类微信页面设计

    Android开发-UI界面–类微信页面设计 一.功能说明 设计一个类似微信的主页面框架,UI布局为上中下结构,包含了四个tag页面 二.开发技术 ​ 本次用到了layout.xml.控件.监听.fr ...

  9. Android Studio类微信界面设计

    文章目录 一.类微信界面能实现的功能 二.xml代码 top.xml bottom.xml tab.xml activity_main.xml 三.Java代码 MainActivity.java w ...

最新文章

  1. pygame的字体画不出来_5毛钱的圆珠笔画的?每一幅都是大师之作,网友:为何我画不出来...
  2. PyTorch之LeNet-5:利用PyTorch实现最经典的LeNet-5卷积神经网络对手写数字图片识别CNN
  3. memcached安装运行
  4. 【C#公共帮助类】JsonHelper 操作帮助类, 以后再也不用满地找Json了,拿来直接用...
  5. 要用Identity Server 4 -- OAuth 2.0 超级简介
  6. gradle tool升级到3.0注意事项
  7. 第十三章 Perl的面向对象编程
  8. webgl编程指南源码_ThreeJS 源码剖析之 Renderer(一)
  9. FFmpeg安卓平台编译
  10. 常用技巧性CSS:颜色渐变,截断英文单词,阴影文字.
  11. 离散数学 (屈婉玲)集合部分 笔记
  12. matlab 实现排序
  13. 计算机快捷键屏幕保护是什么原因,电脑屏幕保护_电脑屏幕保护快捷键
  14. 【qq机器人】发送表情包
  15. 笛卡尔心形线 matlab,笛卡尔心形线
  16. CDR X7 限时3折618年中大促,是时候出手了!
  17. java中singleton_java中singleton的几种实现方式
  18. 分布式事务_实施分布式锁概述
  19. 服务器Linux系统安装 制作CentOS 7.6 U盘启动
  20. 2016服务器系统稳定吗,Windows Server 2016最受企业欢迎的5大特性

热门文章

  1. [剑指Offer]-二叉树的深度
  2. 【转载】P2P系统频现安全漏洞 技术短板将致行业洗牌
  3. easypermission坑_Android EasyPermissions官方库高效处理权限相关教程
  4. 编译mysql提示make[2] [mysql] erro1_APACHE 编译错误:make[2]: *** [htpasswd] Error 1 解决办法...
  5. 51nod1486 大大走格子
  6. mysql 注册驱动_Mysql注册驱动三种方法 | 学步园
  7. AX200网卡WIFI与蓝牙问题解决方法
  8. 如何正确地在vm虚拟机中安装Linux 显卡
  9. 小程故事多 | 看来微服务就是一把双刃剑
  10. anaconda清华源