目录
3、activity1上添加按钮收到activity2的回传值:
一、实验内容与要求:
1、请根据课程内容实现对Activity生命周期的理解,使用log展示生命周期的状态变化;
2、在前次作业的基础上增加列表项的单项点击功能,具体要求是:新建一个新的activity1,recycleview的某一项点击后跳转到这个新的activity1。如:点击新闻列表会跳转到新闻详情页面;
3、实现最新的activityforresult功能,具体要求如下:新建一个新的activity2,在activity1上添加按钮可收到activity2的回传值。如:新闻详情页面中点击收藏按钮可显示当前的收藏数量为N。
二、效果展示:
1、activity生命周期展示
项目启动:
进入后台
返回app
进入子页面
子页面进入后台:
2、列表项点击跳转展示:
列表项:
点击后跳转的详情页:
3、activity1上添加按钮收到activity2的回传值:
三、主要功能的代码实现:
1、activity生命周期通过log来进行展示:
protected void onStart() {
super.onStart();
Log.d("MainActivity","onStart调用");
}
@Override
protected void onResume() {
super.onResume();
Log.d("MainActivity","onResume调用");
}
@Override
protected void onPause() {
super.onPause();
Log.d("MainActivity","onPause调用");
}
@Override
protected void onStop() {
super.onStop();
Log.d("MainActivity","onStop调用");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("MainActivity","onDestroy调用");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d("MainActivity","onRestart调用");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("MainActivity","onCreate调用");
2、列表项点击跳转:
新创建Mainactivity2类:
功能实现的主要代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_item);
Log.d("MainActivity2","onCreate调用");
TextView activity_main2_header = findViewById(R.id.activity_main2_header);
Intent intent1 = getIntent();
activity_main2_header.setText(intent1.getStringExtra("name"));
btn_getInfo = findViewById(R.id.btn_getInfo);
btn_getInfo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent2 = new Intent(MainActivity2.this,ResultActivity.class);
test.launch(intent2);
}
});
}
public ActivityResultLauncher test = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if(result.getResultCode() == 8080){
TextView textView_Info = findViewById(R.id.textView_Info);
textView_Info.setText(result.getData().getStringExtra("data"));
}
}
});
layout布局:
构造Adapter类:
继承RecyclerView.Adapter的Adapter类
public class Adapter extends RecyclerView.Adapter<Adapter.MyHolder>{
private View view;
private Context context;
private ArrayList<Data> list2;
@NonNull
@Override
public MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
view = LayoutInflater.from(context).inflate(R.layout.simplelist,parent,false);
MyHolder myHolder= new MyHolder(view);
return myHolder;
}
@Override
public void onBindViewHolder(@NonNull MyHolder holder,
@SuppressLint("RecyclerView") int position) {
holder.name.setText(list2.get(position).getName());
holder.msg.setText(list2.get(position).getMsg());
holder.date.setText(list2.get(position).getDate());
holder.linearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, MainActivity2.class);
intent.putExtra("name",list2.get(position).getName());
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return list2.size();
}
public class MyHolder extends RecyclerView.ViewHolder {
TextView name;
TextView msg;
TextView date;
ImageView imageView;//点击
LinearLayout linearLayout;
public MyHolder(View itemView) {
super(itemView);
name = itemView.findViewById(R.id.textView_name);
msg = itemView.findViewById(R.id.textView_msg);
date = itemView.findViewById(R.id.textView_date);
imageView = itemView.findViewById(R.id.imageView);//点击
linearLayout = itemView.findViewById(R.id.list_root);
}
}
public Adapter(Context context, ArrayList list2) {
this.context = context;
this.list2 = list2;
}
public Adapter() {
}
}
resultActivity的创建:
此界面用来传回值
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","发送人为张三"+"\n发送时间是:"+ Calendar.getInstance().getTime());
setResult(8080,intent);
finish();
}
}
另外采用intend对象构造data,data里面放textview2需要返回的值,在MainActivity2中构建ActivityResultLauncher test,设置data为textview中的内容。
主要代码:
public ActivityResultLauncher test = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if(result.getResultCode() == 8080){
TextView textView_Info = findViewById(R.id.textView_Info);
textView_Info.setText(result.getData().getStringExtra("data"));
}
}
});