一、实验要求

依托作业一的原有基础,实现对在作业一的item列表上的每一个item项进行设计,使其能够响应点击,并在点击以后跳转到另一个界面,跳转界面能够返回。

二、实验思路

1、xml设计

要实现给出的要求,先捋清我们需要增添什么功能/组件。欲实现每个item能够点击,我们应该设计两个新的xml界面,一个是能够点击的item项显示,这里我们将其命名为item_activity.xml;另一个是点击后的结果界面,将其命名为item_result.xml,item的xml列表我们已经在实验一实现过了,这里不作过多修改。

2、Java实现

在考虑完完整的事件流程所需的fragment设计以后,要思考如何在Java方面实现上述我们需要的功能。

列表响应:

利用recycler view适配器(命名为MyAdapter)将数据和视图进行绑定,然后利用继承Adapter类来传入字符键值对,键值对为想要定义的用户名,该类利用构造函数进行传值。

其中:onCreateViewHolder:这是一个回调方法,用于创建ViewHolder对象。它接收一个ViewGroup作为父视图,然后使用LayoutInflater从item.xml布局文件中创建一个新的视图,并将其封装到Myholder对象中。
onBindViewHolder:这是一个回调方法,用于将数据与视图进行绑定。对于每个列表项,通过Map对象获取键为"i_name"和"i_image"的值,分别用于设置文本视图和图像视图的显示内容。为文本视图设置了一个点击监听器,当用户点击文本视图时,启动一个新的Activity(activity_result.class),并传递名为"details"和"image"的额外数据。
getItemCount:这是一个回调方法,返回数据源中的项目数量。
Myholder:这是一个内部类,继承自RecyclerView.ViewHolder。它包含一个TextView和一个ImageView,用于显示文本和图像。在构造函数中调用super(itemView)来初始化ViewHolder,然后分别初始化textView和tx(用户头像)。

xml视图展示:

android RecyclerView设置选中展示在页面底部_android

代码段:

public class activity_result extends AppCompatActivity {
    TextView dName;

    ImageView dImage;
    Button button;
    Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_result);

        Intent intent=getIntent();
        dName=findViewById(R.id.textView7);//显示的内容即是activity_result.xml文件中定义的参数
        dImage = findViewById(R.id.imageView);
        button=findViewById(R.id.button5);
        //根据intent获取得到的数据设置item控件的值
        dImage.setImageResource(intent.getIntExtra("image",R.drawable.tx2));
        dName.setText(intent.getStringExtra("details"));

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // Intent intent1=new Intent(context, ItemActivity.class);
                finish();
            }
        });
    }
}
结果回传:

定义activity_result类,实现跳转界面产生。

在xml文件里设计视图如下:

用户交互:利用点击监听器,在用户点击按钮时调用onClick方法以实现人机交互,跳到下一个界面,在这个板块我们采取finish()方法来关闭当前的界面,重新返回上一个界面。

数据处理:定义setText和setImageResource方法来设置对应的视图元素,前者调用id,后者调用图片。

再利用findviewbyid和getintent等方法获取结果界面数据,然后显示。

activity_result.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="wrap_content"
    android:orientation="vertical"
    tools:context=".ui.theme.activity_result">

    <LinearLayout
        android:background="@color/white"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/imageView"
            android:layout_width="100dp"
            android:layout_height="120dp"
            android:src="@drawable/tx1" />

        <TextView
            android:id="@+id/textView7"
            android:layout_width="200dp"
            android:layout_height="match_parent"
            android:gravity="center"
            android:text="TextView"
            android:textColor="@color/teal_200"
            android:textSize="35sp" />

        <Button
            android:id="@+id/button5"
            android:layout_width="110dp"
            android:layout_height="97dp"
            android:layout_gravity="center"
            android:text="返回"
            android:textSize="35sp" />

    </LinearLayout>

</LinearLayout>

代码段:

package com.example.homework_1.ui.theme;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import com.example.homework_1.R;

public class activity_result extends AppCompatActivity {
    TextView dName;

    ImageView dImage;
    Button button;
    Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_result);

        Intent intent=getIntent();
        dName=findViewById(R.id.textView7);//显示的内容即是activity_result.xml文件中定义的参数
        dImage = findViewById(R.id.imageView);
        button=findViewById(R.id.button5);
        //根据intent获取得到的数据设置item控件的值
        dImage.setImageResource(intent.getIntExtra("image",R.drawable.tx2));
        dName.setText(intent.getStringExtra("details"));

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // Intent intent1=new Intent(context, ItemActivity.class);
                finish();
            }
        });
    }
}
界面显示:

定义showitem类,将特定页面展示

完成的功能为显示点击列表以后的用户界面。

布局设计如图:

android RecyclerView设置选中展示在页面底部_数据_02

代码段:

public class showitem extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_item);
    }
}

三、实验结果

android RecyclerView设置选中展示在页面底部_数据_03

android RecyclerView设置选中展示在页面底部_android_04

android RecyclerView设置选中展示在页面底部_java_05

四、实验总结

在实现RecyclerView的item点击跳转功能时,需要设置RecyclerView的点击事件监听器。
在ViewHolder类中定义点击事件监听器,并将其设置为RecyclerView的点击事件监听器。
当用户点击RecyclerView的某个item时,需要触发监听器,并执行相应的跳转操作。
利用Intent对象来启动一个新的Activity、Fragment。
在启动新的Activity或Fragment之前,需要将需要传递的数据保存到Intent对象中,以便在新Activity或Fragment中获取这些数据。
在启动新的Activity或Fragment之后,需要调用startActivity()方法来启动该Activity或Fragment。设置键值对,以修改对用户的名称备注。