Android Studio移动开发 类微信界面 2022新版!
第一节 框架初步搭建
文章目录
一、 功能说明
1、请根据课程内容实现对Activity生命周期的理解,使用log展示生命周期的状态变化;
2、根据博客:https://www.jianshu.com/p/c4cfe38a91ed的内容(进阶篇中的 “点击”),在前次作业的基础上增加列表项的单项点击功能,具体要求是:新建一个新的activity1,recycleview的某一项点击后跳转到这个新的activity1。如:点击新闻列表会跳转到新闻详情页面;
3、实现最新的activityforresult功能,具体要求如下:实现最新的activityforresult功能,具体要求如下:新建一个新的itemactivity,在itemactivity上添加按钮可收到resultactivity的回传值。如:新闻详情页面中点击收藏按钮可显示当前的收藏数量为N。
二、代码解析
两个效果共用了一个代码仓库,实现不同效果只需修改AndroidManifest.xml中的具体activity值
(1) activity生命周期
效果展示:
fanhui
具体代码如下:
AndroidManifest.xml
activity3和activity4实现
activity的生命周期的打印:
@Override
protected void onStart() {
super.onStart();
Log.d("xmy","这是A3的生命周期:onStart。。。");
}
@Override
protected void onPause() {
super.onPause();
Log.d("xmy","这是A3的生命周期:onPause。。。");
}
@Override
protected void onResume() {
super.onResume();
Log.d("xmy","这是A3的生命周期:onResume。。。");
}
@Override
protected void onPostResume() {
super.onPostResume();
Log.d("xmy","这是A3的生命周期:onPostResume。。。");
} // 主要保留用于在任何子类完成恢复后想要完成某种设置的系统操作.
@Override
protected void onRestart() {
super.onRestart();
Log.d("xmy","这是A3的生命周期:onRestart。。。");
}
@Override
protected void onStop() {
super.onStop();
Log.d("xmy","这是A3的生命周期:onStop。。。");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("xmy","这是A3的生命周期:onDestroy。。。");
}
activity3到activity4的跳转
MainActivity3.java的关键代码
实现activity3向activity提供信息 intent.putExtra(“name”,“xmy”);
用launcher启动
ublic class MainActivity3 extends AppCompatActivity {
private Button button;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
Log.d("xmy","这是A3的生命周期:onCreate。。。");
//Context context=this;
button=findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity3.this,MainActivity4.class);//intent传值 string action??uri资源
intent.putExtra("name","xmy");
// startActivityForResult(intent,1);
test.launch(intent);
}
});}
//更新2022/10/12 函数启动的封包 launcher启动器 复杂函数的调用方法
public ActivityResultLauncher test= registerForActivityResult(
//new ActivityResultContract, 是抽象类没办法用
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if(result.getResultCode()==2){
Log.d("xmy","onActivityResult有返回值");
textView=findViewById(R.id.textView9);
textView.setText(result.getData().getStringExtra("result"));
}
}
});
MainActivity4.java的关键代码
activity4收到activity提供的信息并返回值
public class MainActivity4 extends AppCompatActivity {
// private Button buttom;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main4);
Intent intent4=getIntent();//收到3
String str1=intent4.getStringExtra("name");
intent4.putExtra("result",str1+"年龄是20");
setResult(2,intent4); //intent string value ,key为 resultcode用来区分该返回的结果是来自于哪一个请求码
TextView textView=findViewById(R.id.textView8);
Log.d("xmy","这是A4的生命周期:onCreate。。。");
}
(2) activity跳转
效果展示:
tiaozhuan
具体代码如下:
AndroidManifest.xml
Mainactivity,ItemActivity和resultActivity实现
itemactivity对应的xml文件activity_item作为返回页面,layout布局如下:
itemActivity.java关键代码
实现最新的activityforresult功能,具体要求如下:新建一个新的itemactivity,在itemactivity上添加按钮可收到resultactivity的回传值
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_item);
textView=findViewById(R.id.itemtextview2);
button=findViewById(R.id.itembutton1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(ItemActivity.this,resultActivity.class);
test.launch(intent);
}
});
}
public ActivityResultLauncher test =registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if (result.getResultCode() == 666) {
Log.d("xmy","onActivityResultLauncher...");
textView.setText(result.getData().getStringExtra("data"));
}
}
});
resultActivity.java关键代码
//用来回值
public class resultActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_result);
Intent intent=getIntent();
intent.putExtra("data","联系人详情信息 id:circle sex:w vx号:123456\n,您查看的时间是"
+Calendar.getInstance().getTime());
setResult(666,intent);
finish();
}
}
三、问题及解决
1.遇到虚拟机打开后闪退的问题:
程序没有报错却没有办法运行的情况往往是最难搞的,但是凭经验来看,很大可能性就是因为R.id.xxx找控件时出现找错的问题
2.recyclerview的具体完善以及回传值的细化正在改进中
四、源码仓库地址
https://gitee.com/elcric-i/2022-2023
五、补充资料
写在最后:作者处于初学阶段,本文只用于记述学习内容和浅显理解,如果读者发现任何问题,还请不吝赐教,多多评论指出或者私信 谢谢!