设计目标:
1、 根据课程内容实现对Activity生命周期的理解,使用log展示生命周期的状态变化。
2、 在之前的作业的基础上增加列表项的单项点击功能,具体要求是:新建一个新的itemactivity,recycleview的某一项点击后跳转到这个新的itemactivity。如:点击新闻列表会跳转到新闻详情页面;
3、 实现最新的activityforresult功能,具体要求如下:新建一个新的resultactivity,在itemactivity上添加按钮可收到resultactivity的回传值。如:新闻详情页面中点击收藏按钮可显示当前的收藏数量为N。
功能说明:
新建一个新的itemactivity,recycleview的某一项点击后跳转到这个新的itemactivity。
public void onBindViewHolder(@NonNull MyViewHolder holder,int position){ holder.textView.setText(list.get(position)); holder.textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(context, ItemActivity.class); context.startActivity(intent); } }); }
新建一个新的resultactivity,在itemactivity上添加按钮可跳转到resultactivity,但是不跳转页面,仅获得返回值。在itemactivity页面与resultactivity的跳转之间实现对Activity生命周期的理解,使用log展示生命周期的状态变化。
public ActivityResultLauncher test; { test=registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() { @Override public void onActivityResult(ActivityResult result) { if(result.getResultCode()==123){ Log.d("wxy","onActivityResultLauncher........."); textView.setText(result.getData().getStringExtra("data")); } } } ); }
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_result); Intent intent = getIntent(); intent.putExtra("data", "...新闻详情...湖北大学体育文化节将于10月23日至25日在校本部与阳逻校区同时举行。"+"\n"+Calendar.getInstance().getTime()); setResult(123,intent); finish(); }
代码解析:
itemactivity.java:
package com.example.mywechat0176;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
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;
public class ItemActivity extends AppCompatActivity {
private TextView textView;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_item);
textView=findViewById(R.id.itemtextView2);
button=findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(ItemActivity.this,ResultActivity.class);
test.launch(intent);
}
});
}
public ActivityResultLauncher test;
{
test=registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if(result.getResultCode()==123){
Log.d("wxy","onActivityResultLauncher.........");
textView.setText(result.getData().getStringExtra("data"));
}
}
}
);
}
@Override
protected void onStart(){
super.onStart();
Log.d("wxy","ItemActivity的: onStart...");
}
@Override
protected void onPause() {
super.onPause();
Log.d("wxy","ItemActivity的: onPaues...");
}
@Override
protected void onStop() {
super.onStop();
Log.d("wxy","ItemActivity的: onStop...");
}
@Override
protected void onResume() {
super.onResume();
Log.d("wxy","ItemActivity的: onRsume...");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("wxy","ItemActivity的: onDestory...");
}
}
resultactivity.java:
package com.example.mywechat0176;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
import java.util.Calendar;
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", "...新闻详情...湖北大学体育文化节将于10月23日至25日在校本部与阳逻校区同时举行。"+
"\n"+Calendar.getInstance().getTime());
setResult(123,intent);
finish();
}
@Override
protected void onStart(){
super.onStart();
Log.d("wxy","ResultActivity。。。onStart");
}
@Override
protected void onPause() {
super.onPause();
Log.d("wxy","ResultActivity。。。onPaues");
}
@Override
protected void onStop() {
super.onStop();
Log.d("wxy","ResultActivity。。。onStop");
}
@Override
protected void onResume() {
super.onResume();
Log.d("wxy","ResultActivity。。。onRsume");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("wxy","ResultActivity。。。onDestory");
}
}
Myadapter.java:
package com.example.mywechat0176;
import android.content.Context;
import android.content.Intent;
import android.view.ContentInfo;
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;
//<Myadapter.MyViewHolder>表示使用自己的adapter类
public class Myadapter extends RecyclerView.Adapter<Myadapter.MyViewHolder> {
private View view;
private Context context;
private List<String> list;
public Myadapter(Context context,List<String> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType){
view= LayoutInflater.from(context).inflate(R.layout.item,parent,false);
MyViewHolder holder=new MyViewHolder(view);
return holder;
}
//处理item.xml,返回二级holder,LayoutInflater压缩器,把xml压缩成view
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder,int position){
holder.textView.setText(list.get(position));
holder.textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, ItemActivity.class);
context.startActivity(intent);
}
});
}
//数据绑定data-holder。position,数据位置
@Override
public int getItemCount(){return list.size();}
//item行,限定一次性显示几行,RecyclerView显示多少行
public class MyViewHolder extends RecyclerView.ViewHolder{
private TextView textView;
private ImageView imageView;
public MyViewHolder(View itemview){
super(itemview);
textView=(TextView) itemview.findViewById(R.id.textView);
imageView=(ImageView) itemview.findViewById(R.id.imageView);
}
}
}
运行展示截图:
源码仓库地址:https://gitee.com/wu-xin-yi/wxygit/tree/master/AS%E4%BD%9C%E4%B8%9A2