Android移动开发作业--Recycleview的点击跳转功能实现

目录

一、设计目标

1.1 设计要求

1.2 设计功能介绍

二、设计详解

2.1 定义contactMS类

2.2 定义布局文件

2.3 修改Myadapter适配器

2.4 定义ContactDetailsActivity.java

三、运行界面展示

四、源码仓库地址


一、设计目标

1.1 设计要求

依托作业一,将recyclerView的每个item增加点击功能,点击后跳转到一个新的view展示信息。

1.2 设计功能介绍

点击干员通讯录列表的任一项,会跳转到该干员的名字,性别等详细信息页面。

二、设计详解

2.1 定义contactMS类

在contactMS中创建

1.创建contactMS类,用于存储联系人的信息,包括头像、名字和性别等数据类型。

public class contactMS   {
    private String 分类;
    private String 地区;
    private String 性别;
    private String 名字;
    private int 图片;

    }

2.创建构造函数,用于传值。

 public contactMS(int 图片, String 名字, String 地区, String 性别 , String 分类 ) {
        this.图片 = 图片;
        this.名字 = 名字;
        this.地区=地区;
        this.性别 = 性别;
        this.分类 = 分类;

        }

3.定义方法,用于获取图片以及文本的值。

    public String getMessageText() {
        return 名字;
    }

    public int getImageResourceId() {
        return  图片;
    }
    public String getgender() {
        return  性别;
    }
    public String getregion() {
        return  地区;
    }
    public String gettype() {
        return  分类;
    }

4.写入Parcelable接口

由于后续需要用Parcelable接口,使跳转时在 Intent中传递contactMS对象,所以这里定义contactMS类时继承Parcelable接口,并定义对应的方法。

其中

contactMS(Parcel in) 从 Parcel 中读取数据并初始化对象

createFromParcel(Parcel in)通过读取 Parcel 对象来创建对象

writeToParcel将对象数据写入 Parcel 中

public class contactMS  implements Parcelable {
    private String 分类;
    private String 地区;
    private String 性别;
    private String 名字;
    private int 图片;

    public contactMS(Parcel in) {
        图片 = in.readInt();
        名字 = in.readString();
        地区 = in.readString();
        性别 = in.readString();
        分类 = in.readString();

    }

相应的方法:

 public static final Creator<contactMS> CREATOR = new Creator<contactMS>() {
        @Override
        public contactMS createFromParcel(Parcel in) {
            return new contactMS(in);
        }

        @Override
        public contactMS[] newArray(int size) {
            return new contactMS[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeInt(图片);
        parcel.writeString(名字);
        parcel.writeString(地区);
        parcel.writeString(性别);
        parcel.writeString(分类);

    }

2.2 定义布局文件

为联系人列表项创建两种不同的布局文件,分别表示跳转前和跳转后的页面。这些布局应包括头像、消息文本等元素。

其中,item.xml是列表每一项的布局,contact.xml是对应的项跳转后的详情界面的布局。

(这里的item.xml其实是上一次的修改后的,只不过多加了一个图片)

(一)item.xml 里包含一张图片用来显示干员头像,一个文本显示干员名称。故应包含1个ImageView和1个TextView。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center">



        <ImageView
            android:id="@+id/imageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/amiya2" />


    <TextView
        android:id="@+id/messageText"
        android:layout_width="278dp"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:layout_weight="1"
        android:gravity="center"
        android:text="TextView"
        android:textColor="@android:color/holo_red_dark"
        android:textSize="34sp" />
</LinearLayout>

布局如图:

注意,这里必须要插入一张图片作为默认图片,不可以是tools控件,因为tools控件的路径与图片路径不一样,导致无法启动。同样后面的contact.xml也是如此。        

error: '@tools:sample/avatars' is incompatible with attribute src (attr) reference|color.

这个报错就是显示有一个使用@tools:sample/avatars的属性与src 属性不兼容。

(二)contact.xml包含干员头像,以及名字地区性别分类属性,故需要1个ImageView和8个TextView。

为了让两个文本框在同一行,这里使用了FrameLayout。为了让四个FrameLayout垂直排布,要将整个LinearLayout的orientation设为vertical。

(其实这里用ConstraintLayout写更简洁,不过我写的时候没想到所以还是贴源码了)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">



        <ImageView
            android:id="@+id/imageView5"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:src="@drawable/amiya2" />

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="7">

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent">

                <TextView
                    android:id="@+id/textViewa"
                    android:layout_width="144dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:text="名字"
                    android:textSize="34sp" />

                <TextView
                    android:id="@+id/textViewa2"
                    android:layout_width="274dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:text="TextView"
                    android:textSize="34sp" />

            </LinearLayout>


        </FrameLayout>

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="7">

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent">

                <TextView
                    android:id="@+id/textViewb"
                    android:layout_width="152dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="地区"
                    android:textSize="34sp" />

                <TextView
                    android:id="@+id/textViewb2"
                    android:layout_width="274dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="TextView"
                    android:textSize="34sp" />

            </LinearLayout>


        </FrameLayout>

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="7">

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent">

                <TextView
                    android:id="@+id/textViewc"
                    android:layout_width="160dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="性别"
                    android:textSize="34sp" />

                <TextView
                    android:id="@+id/textViewc2"
                    android:layout_width="274dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="TextView"
                    android:textSize="34sp" />

            </LinearLayout>


        </FrameLayout>

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="7">

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent">

                <TextView
                    android:id="@+id/textViewd"
                    android:layout_width="169dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="分类"
                    android:textSize="34sp" />

                <TextView
                    android:id="@+id/textViewd2"
                    android:layout_width="274dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="TextView"
                    android:textSize="34sp" />

            </LinearLayout>


        </FrameLayout>


</LinearLayout>

布局如图:

2.3 修改Myadapter适配器

1. 改写构造方法

接收contactMS对象

 public Myadapter( List <contactMS> msList) {
        this.msList=msList;
    }

2.改写onBindViewHolder方法

设置跳转前的页面的文本和图片值

    public void onBindViewHolder(@NonNull myholder holder, int position) {
        contactMS msList1=  msList.get(position);

        holder.messageText.setText(msList1.getMessageText());
        holder.ImageView.setImageResource(msList1.getImageResourceId());
    }

3.改写myholder类

增加itemview的监听器并设置点击事件

onClick方法中使用intent传值跳转到ContactDetailsActivity.class

    public class myholder extends  RecyclerView.ViewHolder{//类的嵌套,会调用子类对象
        TextView messageText;
        ImageView ImageView;
        public myholder(@NonNull View itemView) {

            super(itemView);
            messageText = itemView.findViewById(R.id.messageText);
            ImageView = itemView.findViewById(R.id.imageView);
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int position = getAdapterPosition();
                    if (position != RecyclerView.NO_POSITION) {
                        contactMS clickedContact = msList.get(position);
                        Intent intent = new Intent(itemView.getContext(), ContactDetailsActivity.class);
                        intent.putExtra("contact", (Parcelable) clickedContact);
                        itemView.getContext().startActivity(intent);
                    }
                }
            });
        }
        }

2.4 定义ContactDetailsActivity.java

在ContactDetailsActivity里接收content,取出各属性的值添入各个控件

public class ContactDetailsActivity extends AppCompatActivity {


    @SuppressLint("MissingInflatedId")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.contact);
        ImageView imageView;
        TextView textView1,textView2,textView3,textView4;
        // 获取从上一个界面传递过来的联系人信息
        contactMS contact = getIntent().getParcelableExtra("contact");
        int rid=contact.getImageResourceId();
        String name = contact.getMessageText();
        String region = contact.getregion();
        String gender = contact.getgender();
        String type = contact.gettype();
        textView1=findViewById(R.id.textViewa2);
        textView2=findViewById(R.id.textViewb2);
        textView3=findViewById(R.id.textViewc2);
        textView4=findViewById(R.id.textViewd2);
        imageView=findViewById(R.id.imageView5);
        imageView.setImageResource(rid);
        textView1.setText(name);
        textView2.setText(region);
        textView3.setText(gender);
        textView4.setText(type);

    }
}

三、运行界面展示

3.1 初始界面

3.2 点击item

(这里太多了不一一展示) 

四、源码仓库地址

gitee:gitee

 github:github

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值