1、前提
在上次的实验中已经完成了UI界面的初步实现,对其中的联系人tab页面运用了recycleView。这次进行在列表页上点击跳转到另一详情页面的实现。
2、实验目的
对recycleView的item进行点击跳转至另一个页面,并使用Intent进行数据的传值并且可以从被跳转的页面中返回原先的Fragment页面。
3、效果展示
4、实验代码
contacts_Activity.java
新建contacts_Activity.java用于联系人详情页面的初始化及跳转返回事件的监听
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;
public class contacts_Activity extends AppCompatActivity {
TextView textView;
ImageButton imageButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contacts);
Intent intent = getIntent();
String name = intent.getStringExtra("name");
textView = findViewById(R.id.textView01);
imageButton = findViewById(R.id.imageButton1);
textView.setText("联系人: "+ name);
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
}
activity_contacts.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="match_parent"
android:orientation="vertical"
tools:context=".contacts_Activity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageButton
android:id="@+id/imageButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="@+id/textView01"
app:layout_constraintStart_toStartOf="@+id/textView01"
app:layout_constraintTop_toTopOf="@+id/textView01"
app:srcCompat="@android:drawable/ic_menu_revert" />
<TextView
android:id="@+id/textViewTitle"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_marginTop="1dp"
android:gravity="center"
android:text="联系人"
android:textSize="35dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</LinearLayout>
<TextView
android:id="@+id/textView01"
android:layout_width="match_parent"
android:layout_height="679dp"
android:gravity="center"
android:text="TextView"
android:textSize="45dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</LinearLayout>
Myadapter.java
在onBindViewHolder方法中重写onClick方法对联系人列表的点击事件(跳转事件),并将class的值进行传递,使其获取Intent的值
public void onBindViewHolder(@NonNull Myadapter.Myholder holder, @SuppressLint("RecyclerView") int position) {
holder.textView.setText(list1.get(position));
holder.textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context1,contacts_Activity.class);
intent.putExtra("name",list1.get(position));
context1.startActivity(intent);
}
});
}
小结
1、在为RecyclerView的item设置点击事件时,通常需要在Adapter的onBindViewHolder方法中设置点击事件。通过holder.itemView.setOnClickListener方法,可以为每一个item设置点击事件。
2、当点击事件发生时,我们可以在Adapter的onClickListener方法中处理这个事件。启动一个新的Activity,或者只是在Activity中执行一些操作。
代码仓库
具体代码已上传https://gitee.com/yjwl102/as-project_test/tree/master,代码仓库已更新。