作业要求:新建一个新的activity1,recycleview的某一项点击后跳转到这个新的activity1。如:点击新闻列表会跳转到新闻详情页面;
在上次作业的基础上添加点击跳转查看详情的功能
参考: https://www.jianshu.com/p/c4cfe38a91ed
在adapter.java文件的onBindViewHolder中直接对控件做点击事件
@Override
public void onBindViewHolder(@NonNull XxxViewHolder holder, int position) {
holder.控件名.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO:
}
});
}
如下
@Override
public void onBindViewHolder(myviewholder myviewholder, int j)
{
myviewholder.textView.setOnClickListener(new View.OnClickListener() //直接在adapter里写某个控件的监听
{
@Override
public void onClick(View view)
{
//不能写StartActivityForResult,因为在fragment下写StartActivityForResult是需要一个返回值,此时当前页面不动
//可是当前页面是recycleview必须要跳转到其他activity上
//startactivity启动必须是在context环境下
Intent intent = new Intent(context,ItemActivity.class);
context.startActivity(intent);
//现在点击跳转到itemactivity详情界面,接下来要查看课程信息
}
});
}
接下来新建一个activity,命名itemactivity,作为点击跳转到的详情界面,如图
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_item);
button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
}
写完setOnClickListener后需要写launcher
public ActivityResultLauncher test;
{
test = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if (result.getResultCode() == 888) {
Log.d("xr", "onActivityResultLauncher...");
textView.setText(result.getData().getStringExtra("data"));
}
}
});
}
//因为launcher是一个function,不要放到了onCreate里面!!
再在onClick里面写test.lauch
@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 view) {
Intent intent = new Intent(ItemActivity.this,ResultActivity2.class);
test.launch(intent);
}
});
}
注意点是
这个地方要记得写,不然之后点击的时候是没有返回值的。一开始忘记了写这里,点击就没有反应,收不到返回值
test.launch需要一个intent,在其前面写一个intent,在itemactivity环境下跳到结果值,此时创建一个新的activity命名为ResultActivity。
因为result只用传返回值,所以不用管xml文件。
ResultActivity中首先有一个intent用来接收ItemActivity发过来的intent,ResultActivity中的intent放值
插入时间用calendar
之后setresult,先是收到item传来的intent,再将result中的intent中的数据传回去
注意这两个地方的数字要一样
最后一定加上finish,表示整个activity结束
public class ResultActivity2 extends AppCompatActivity {
//是返回页面,写button的点击事件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_result2);
Intent intent=getIntent();
intent.putExtra("data","课程:安卓\n"+"老师:肖蓉。\n"+
"上课时间是:\n"+ Calendar.getInstance().getTime());
setResult(2,intent);
finish();
}
}
总体代码
ItemActivity
package com.example.work2;
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.Button;
import android.widget.TextView;
public class ItemActivity extends AppCompatActivity {
private Button button;
private TextView textView;
@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 view) {
Intent intent = new Intent(ItemActivity.this,ResultActivity2.class);
test.launch(intent);
}
});
}
public ActivityResultLauncher test;
{
test = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if (result.getResultCode() == 2) {
Log.d("xr", "onActivityResultLauncher...");
textView.setText(result.getData().getStringExtra("data"));
}
}
});
}
//因为launcher是一个function,不要放到了onCreate里面!!
}
ResultActivity
package com.example.work2;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import java.util.Calendar;
//作为传值的界面,得到的是返回值
//是给itemactivity的返回值,不需要跳转,因此不需要管xml文件
public class ResultActivity2 extends AppCompatActivity {
//是返回页面,写button的点击事件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_result2);
Intent intent=getIntent();
intent.putExtra("data","课程:安卓\n"+"老师:肖蓉。\n"+
"上课时间是:\n"+ Calendar.getInstance().getTime());
setResult(2,intent);
finish();
}
}