AS移动开发--Recycleview点击跳转功能的简单实现

一、作业目标

依托前一个项目AS移动开发--类微信界面的实现,优化界面并将将recyclerView的每个item增加点击功能,点击后跳转到一个新的view展示信息。

二、开发技术

开发工具:Android studio

版本:API 32 Android 12

三、开发思路

首先,先设计fragement2.java中的recycleview要跳转到的页面talk.xml,然后创建新的MainActivity2.java用于控制跳转页面后的信息,然后在Myadapter中添加点击事件,并部署相关信息,最后对MainActivity中做出相应的修改使得能够运行。

四、设计过程

1、修改fragement2.java

在原有的fragement2文件中进行修改,在onCreateView中添加recycleview、跳转代码等。

1.1、首先定义一个string数组,用来存储将要显示的列表。

1.2、添加一个arraylist,采用list.add来填充recycleview中每个列

1.3、创建一个自定义的适配器 Myadapter 的实例,并传入上下文对象和数据列表作为参数。接着在 Myadapter 中设置一个点击事件监听器(OnItemClickListener),当列表项被点击时,执行其中的 onItemClick 方法。在 onItemClick 方法中,通过 list.get(position) 获取点击项的数据,创建一个意图(Intent),并将数据作为额外信息放入意图中。使用 startActivity(intent) 启动了 MainActivity2,并传递了数据data。

这段代码是在列表项被点击时,使用intent方法,跳转到 MainActivity2 并传递相应的数据。

1.4、将适配器与 RecyclerView 相关联,并设置 RecyclerView 的布局管理器。

总的来说,fragement2创建一个包含 RecyclerView 的 Fragment,在该 Fragment 中显示names列表数据,当点击列表项时可以跳转到另一个 MainActivity2 并传递相应的数据。

fragement2源码:

package com.example.myapplication;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;

import androidx.fragment.app.Fragment;

import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.ArrayList;
import java.util.List;



public class Fragment2 extends Fragment{   //继承自Fragment类的Fragment3类。在该类中,重写了onCreateView方法用于创建视图
    private RecyclerView recyclerView;
    private List<String> list= new ArrayList<>();
    private Context context;
    private Myadapter myadapter;

    @SuppressLint("MissingInflatedId")
    @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
        String[] names={"爸爸","妈妈","姐姐","弟弟","二哥","张三","李四","王五","赵六","老刘","小周"};
        View view=inflater.inflate(R.layout.tab2,container,false);
        context=view.getContext();
        recyclerView=view.findViewById(R.id.recycleview);
        list=new ArrayList();
        for(int i=0;i< names.length;i++)
            list.add(names[i]);

        myadapter = new Myadapter(context,list);
        myadapter.setOnItemClickListener(new Myadapter.OnItemClickListener() {
            @Override
            public void onItemClick(int position) {
                // 处理点击事件
                String text = list.get(position);
                Intent intent = new Intent(getContext(), MainActivity2.class);
                intent.putExtra("data", text);
                startActivity(intent);
            }
        });
        recyclerView.setAdapter(myadapter);
        LinearLayoutManager manager=new LinearLayoutManager(context);
        manager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(manager);
        return view;

    }
}

2、创建Myadapter.java适配器

用于将数据绑定到 RecyclerView 上

使用OnItemClickListener监听器,通过 list1 获取对应位置的数据,将数据设置到 ViewHolder 中的 textView 中。 textView 设置了一个点击事件监听器,在点击时触发 mListener 的 onItemClick 方法,并将点击的位置 position 作为参数传递进去。

源码:

package com.example.myapplication;

import android.annotation.SuppressLint;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.List;


public class Myadapter extends RecyclerView.Adapter<Myadapter.Myholder> {

    Context context1;
    List<String> list1;
    OnItemClickListener listener;


    public interface OnItemClickListener{
        void onItemClick(int position);
    }
    private OnItemClickListener mListener;
    public void setOnItemClickListener(OnItemClickListener listener) {
        mListener = listener;
    }
    public Myadapter(Context context,List list) {
        context1=context;
        list1=list;
        mListener = listener;
    }

    @NonNull
    @Override
    public Myholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context1).inflate(R.layout.item,parent,false);
        Myholder holder = new Myholder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull Myholder holder, @SuppressLint("RecyclerView") int position) {
        holder.textView.setText(list1.get(position));
        holder.textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(mListener!=null) {
                    mListener.onItemClick(position);}
            }
        });
    }

    @Override
    public int getItemCount() {
        return list1.size();
    }

    public class Myholder extends RecyclerView.ViewHolder{
        TextView textView;
        public Myholder(@NonNull View itemView) {
            super(itemView);
            textView=itemView.findViewById(R.id.textView6);
        }
    }
}

3、创建MainActivity2.java

创建一个新界面,用来显示对应联系人的消息框talk.xml,并设置了一个返回键imageview,在点击imageview时返回结果数据。

返回键的效果采用的是finsh()与setResult()来返回上一个活动并且传递数据。

源码:

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity2 extends AppCompatActivity {
    TextView textView;
    @SuppressLint("MissingInflatedId")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.talk);
        String data= getIntent().getStringExtra("data");
        Log.d("xr", data);

        textView=findViewById(R.id.textView7);
        textView.setText(data);

        ImageView imageView=findViewById(R.id.imageView5);
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent();
                intent.putExtra("result","888");
                setResult(666,intent);
                finish();
            }
        });

    }
}

4、talk.xml

MainActivity2的启动页面,用来展示消息框。

                                        

源码:

<?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:background="@color/white"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/imageView5"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:src="@android:drawable/ic_menu_revert"
            tools:srcCompat="@android:drawable/ic_menu_revert"
            android:background="#009688"/>

        <TextView
            android:id="@+id/textView7"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="9"
            android:background="#009688"
            android:gravity="center"
            android:text="信息"
            android:textColor="@color/white"
            android:textSize="30sp"
            />


    </LinearLayout>

    <TextView
        android:id="@+id/textView9"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="8"
        android:text="暂无消息"
        android:textSize="20sp"
        android:gravity="center"
        />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/textView8"
            android:layout_width="0dp"
            android:layout_weight="7"
            android:layout_height="match_parent"
            android:background="@color/white"
            android:gravity="center"
            android:paddingLeft="15dp"
            android:paddingTop="15dp"
            android:paddingRight="15dp"
            android:paddingBottom="15dp"
            android:text="请输入内容"
            android:textSize="20dp"
            tools:ignore="TextSizeCheck" />

        <Button
            android:id="@+id/button5"
            android:layout_width="0dp"
            android:layout_weight="3"
            android:layout_height="match_parent"
            android:background="#009688"
            android:text="发送"
            android:textColor="@color/white"
            android:textSize="24sp"
            app:backgroundTint="#4CAF50" />

    </LinearLayout>
</LinearLayout>

5、textview_outer_border.xml

用来优化联系人界面边框。

源码:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#2196F3" />  <!-- 设置填充颜色 -->
    <stroke
        android:width="1dp"
    android:color="#009688" />
    <corners android:radius="4dp" />
    <padding
        android:left="20dp"
        android:top="20dp"
        android:right="2dp"
        android:bottom="5dp" />
    <size android:height="100dp" />
    <solid android:color="@color/white" />
</shape>


1.<solid> 标签:用于设置填充颜色,这里的 android:color 属性设置为 #2196F3,表示填充颜色为浅蓝色。

2.<stroke> 标签:用于设置描边。android:width 属性设置为 1dp,表示描边宽度为 1dp;android:color 属性设置为 #009688,表示描边颜色为深绿色。

3.<corners> 标签:用于设置圆角。android:radius 属性设置为 4dp,表示四个角的圆角半径为 4dp。

4.<padding> 标签:用于设置内边距。分别设置左边距为 20dp、上边距为 20dp、右边距为 2dp、下边距为 5dp。

5.<size> 标签:用于设置形状的大小,设置了高度为 100dp。

该文件定义一个带有描边、圆角和内边距的矩形形状,填充颜色为浅蓝色,描边颜色为深绿色,并且指定了固定的高度为 100dp。

五、效果展示

recyclerView点击

六、总结

        本次仅仅是完成了简单的recycleview点击跳转,还没有完善联系人页面的设计,比如图片、时间戳等,后续还需要继续完善。

        同时在实现这个功能的过程中也存在一些问题:比如跳转页面的返回,一开始使用的是intent直接返回到fragement2.java,但是应该使用FragmentManager来进行Fragment的切换,而不是直接启动一个新的Activity。最后用来最简便的方法,finsh()返回上一个界面。这个方面还需要自己深入学习,继续加强。

七、github仓库

AS-weixin2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值