Android开发:recycleView页面点击跳转

对带有recycleView的页面进行点击跳转

比如,某一tab页是新闻列表,则点击某一行能跳转到新闻详情页面

主要步骤

一、设计recycleView页面

在这里插入图片描述
1.因为我们需要在消息界面建一个消息列表,所以我们要把recycleView控件放到消息界面的布局文件里。
在这里插入图片描述
2.上面可以看到recycleView里有很多item分别对应消息界面中的每一个列表,所以我们需要新建一个item.xml文件用来详细规划每一个列表元素的布局
在这里插入图片描述
3.编写对应的适配器Myadapter
目的配置消息界面里recycleView的内容展示和点击跳转功能

package com.example.myapplication;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
import java.util.Map;

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

    private List<Map<String,Object>> data;

    private Context context;
    private View inflater;
    public Myadapter(Context context,List<Map<String,Object>> data){
        this.data= data;
        this.context=context;
    }
    @Override
    public myviewholder onCreateViewHolder( ViewGroup viewGroup, int viewType) {
        inflater = LayoutInflater.from(context).inflate(R.layout.item,viewGroup,false);
        myviewholder myviewholder=new myviewholder(inflater);
        return myviewholder;
    }

    @Override
    public void onBindViewHolder(myviewholder holder, @SuppressLint("RecyclerView") int position ){
        holder.title.setText(data.get(position).get("标题").toString());
        holder.content.setText(data.get(position).get("简介").toString());
        holder.head_port.setImageResource((int)(data.get(position).get("头像")));
        holder.tipView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(context,MainActivity2.class);
                intent.putExtra("tx",(int)data.get(position).get("头像"));
                intent.putExtra("名字",data.get(position).get("简介").toString());
                intent.putExtra("介绍",data.get(position).get("介绍").toString());
                context.startActivity(intent);
            }
        });
    }

    @Override
    public int getItemCount() {

        return data.size();
    }

    class myviewholder extends RecyclerView.ViewHolder{
        TextView title;
        TextView content;
        ImageView head_port;
        LinearLayout tipView;
        public myviewholder( View itemView) {
            super(itemView);
            head_port = itemView.findViewById(R.id.touxiang);
            title=itemView.findViewById(R.id.textView_1);
            content=itemView.findViewById(R.id.textView_2);
            tipView=itemView.findViewById(R.id.onechat);
        }
    }
}

4.在消息界面对应的java文件中写入和管理我们要展示的内容

package com.example.myapplication;

import android.content.Context;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DividerItemDecoration;
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.HashMap;
import java.util.List;
import java.util.Map;

/**
 * A simple {@link Fragment} subclass.
 * Use the {@link Fragment_2#**#} factory method to
 * create an instance of this fragment.
 */
public class Fragment_2 extends Fragment {
    private RecyclerView recyclerView;
    private List<Map<String,Object>> data;
//    private List<String> list_t;
//    private List<String> list_c;
    private Context context;
    private Myadapter myadapter;
    public Fragment_2() {

        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.this_chat, container, false);
        context = view.getContext();

        recyclerView = view.findViewById(R.id.recyclerView);
        data = new ArrayList<Map<String,Object>>();

        String [] title={"小猫","小狗","小鸟","小花","飞机","女孩","男孩","白云","疑问"};
        String [] introduce={"我是一只小猫","我是一只小狗","我是一只小鸟","祖国的花朵","私人飞机","优雅永不过时","永远的骑士","万里晴空","下一个写点啥"};
        String [] I_detail ={"猫,属于猫科动物,分家猫、野猫,是全世界家庭中较为广泛的宠物。家猫的祖先据推测是古埃及的沙漠猫,波斯的波斯猫,已经被人类驯化了3500年(但未像狗一样完全地被驯化)。\n" +
                "一般的猫:头圆、颜面部短,前肢五指,后肢四趾,趾端具锐利而弯曲的爪,爪能伸缩。夜行性。\n" +
                "以伏击的方式猎捕其它动物,大多能攀援上树。猫的趾底有脂肪质肉垫,以免在行走时发出声响,捕猎时也不会惊跑鼠。行进时爪子处于收缩状态,防止爪被磨钝,在捕鼠和攀岩时会伸出来。",
                "狗(拉丁文Canis lupus familiaris)属于脊索动物门、脊椎动物亚门、哺乳纲、真兽亚纲、食肉目、裂脚亚目、犬科动物。中文亦称“犬”,狗分布于世界各地。狗与马、牛、羊、猪、鸡并称“六畜”。有科学家认为狗是由早期人类从灰狼驯化而来,驯养时间在4万年前~1.5万年前。被称为“人类最忠实的朋友”,是饲养率最高的宠物,其寿命大约在12~18年 [1]  。在中国文化中,狗属于十二生肖之一,在十二生肖中的第11位。",
                "鸟,又称作鸟儿。定义:体表被覆羽毛的卵生脊椎动物,鸟的主要特征是:身体呈流线型(纺锤型或梭形),大多数飞翔生活。体表被覆羽毛,一般前肢变成翼(有的种类翼退化);胸肌发达;直肠短,食量大消化快,即消化系统发达,有助于减轻体重,利于飞行;心脏有两心房和两心室,心搏次数快。体温恒定。呼吸器官除具肺外,还具有多个气囊辅助呼吸,使得鸟类无论在吸气和呼气时,均有氧气通过肺,即双重呼吸。",
                "花是被子植物(被子植物门植物,又称有花植物或开花植物)的繁殖器官,其生物学功能是结合雄性精细胞与雌性卵细胞以产生种子。这一进程始于传粉,然后是受精,从而形成种子并加以传播。对于高等植物而言,种子便是其下一代,而且是各物种在自然分布的主要手段。同一植物上着生的花的组合称为花序。\n" +
                        "(特别注意:本义项介绍的是植物的生殖器官;而花在生活中亦常被指为观赏的开花植物,详见花卉词条或花的另一义项:一类具有观赏价值的植物。)\n" +
                        "裸子植物的花构造较简单,通常无明显的花被,单性,形成雄球花和雌球花,被子植物的花构造复杂多样。所以一般所说的花就是指被子植物的花。",
                "飞机(aeroplane,airplane)是指具有一具或多具发动机的动力装置产生前进的推力或拉力,由机身的固定机翼产生升力,在大气层内飞行的重于空气的航空器。 [1] \n" +
                        "飞机是20世纪初最重大的发明之一,公认由美国人莱特兄弟发明。他们在1903年12月17日进行的飞行作为“第一次重于空气的航空器进行的受控的持续动力飞行”被国际航空联合会(FAI)所认可,同年他们创办了“莱特飞机公司”。自从飞机发明以后,飞机日益成为现代文明不可缺少的工具。它深刻的改变和影响了人们的生活,开启了人们征服蓝天历史。",
                "窈窕淑女,对于女子,我觉得这句话的形容是最恰如其分,窈窕淑女,贤良善良的女子,美丽大方,女孩子就应该是这个样子,这个样子的女孩就是男子所追求的目标应该是男子选来做配偶的人。所以只要一想到女孩的美,就立即想到这两句,窈窕淑女,君子好逑。",
                "形容男孩子的形容词有很多,比如文质彬彬、风流倜傥、一表人才、英姿飒爽、风度翩翩、气宇轩昂、玉树临风、才貌双全、逸群之才、昂藏七尺、彪形大汉、惨绿少年、断袖之宠等",
                "云是大气中的水蒸气遇冷液化成的小水滴或凝华成的小冰晶,所混合组成的漂浮在空中的可见聚合物。\n" +
                        "云是地球上庞大的水循环的有形的结果。太阳照在地球的表面,水蒸发形成水蒸气,一旦水汽过饱和,水分子就会聚集在空气中的微尘(凝结核)周围,由此产生的水滴或冰晶将阳光散射到各个方向,这就产生了云的外观。并且,云可以形成各种的形状,也因在天上的不同高度、形态而分为许多种",
                "①《墨子·公孟》:“若大人行淫暴於国家,进而谏,则谓之不逊;因左右而献谏,则谓之言议,此君子之所疑惑也。”\n" +
                        "②《后汉书·张衡传》:“亲履艰难者知下情,备经险易者达物伪。故能一贯万机,靡所疑惑,百揆允当,庶绩咸熙。”\n" +
                        "③唐刘知几《史通·论赞》:“夫论者所以辩疑惑,释凝滞。”\n" +
                        "《东周列国志》第一百二回:“及秦使捧国书来,欲与魏息兵修好,叩其来意,都是敬慕信陵之语,又接得太子增家信,心中愈加疑惑。”\n" +
                        "④巴金《家》七:“剑云抬起头来看琴的脸,他的脸上现出疑惑的表情。”"};
        int[] image ={R.drawable.cat,R.drawable.dog,R.drawable.birds,R.drawable.flower,R.drawable.plane,R.drawable.girls,R.drawable.boys,R.drawable.yun,R.drawable.idea};
        for (int i=0;i<title.length;i++)
        {
            Map<String,Object> map=new HashMap<String,Object>();
            map.put("标题",title[i]);
            map.put("简介",introduce[i]);
            map.put("头像",image[i]);
            map.put("介绍",I_detail[i]);
            data.add(map);
        }

        LinearLayoutManager manager = new LinearLayoutManager(context);
        manager.setOrientation(LinearLayoutManager.VERTICAL);
        myadapter = new Myadapter(context,data);
        recyclerView.setAdapter(myadapter);
        recyclerView.setLayoutManager(manager);
        recyclerView.addItemDecoration(new DividerItemDecoration(context, LinearLayoutManager.VERTICAL));//添加下划线
        return view ;
    }
}

这样recycleView的布局算是结束了

二、对recycleView里的内容进行点击跳转实现

我们的需求是点击某一个内容跳转到其详细页面
所以我们需要先建一个activity文件用来展示我们点击跳转后的内容
在这里插入图片描述

在这个activity的布局文件里需设计我们想要的模板布局
在这里插入图片描述
为了方便起见,我们只创建了一个对应的activity活动,当我们点击某个内容时,我们可以通过intent来传递和接受对应的数据和参数。我们只需在这个activity的java文件里建立所需的固定模板和接受消息界面传来的intent参数,并利用intent传来的数据来设置这个activity页面。

在这里点击对应内容跳转到其详细内容的核心就是使用startActivity()来开启一个活动,而这个函数我们应该写在适配器Myadapter里,这是因为我们的recycleView是设置在Fragment_2里面的(我们的消息界面所展示所对应的文件),而我们具体的逻辑配置是写在Myadapter里的,所以我们点击跳转的事件也应该写在里面。

然后除了跳转我们还需要写一个返回用来退出当前活动,回到我们的主界面活动,所以我们还需要在MainActivity2里面使用finish()来结束掉当前活动。

除此之外我们还需要在MainActivity1MainActivity2之间进行参数传递
所以
在Myadapter里使用函数putExtra()用来向activity传递一些页面设置参数
在MainActivity2里使用getStringExtra()来接受intent里传来的内容

在这activity的java文件里去写一些intent的数据接收和展示过程

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

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 android.widget.Toast;

public class MainActivity2 extends AppCompatActivity{

    private ImageView imageView;
    private TextView textView1,textView2;
    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main2);
        Intent intent = getIntent();
        String first = intent.getStringExtra("名字");
        String second = intent.getStringExtra("介绍");
        imageView =findViewById(R.id.V_Animal);
        textView1 = findViewById(R.id.T_name);
        textView2 = findViewById(R.id.T_introduce);
        button = findViewById(R.id.B_fanhui);
        textView1.setText(first);
        textView2.setText(second);
        imageView.setImageResource(intent.getIntExtra("tx",1));
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity2.this,first,Toast.LENGTH_SHORT).show();
            }
        });
        button.setOnClickListener(new View.OnClickListener() {
            @Override
        public void onClick(View v) {
                finish();
        }});
    }
}

下面是Myadapter里的内容点击事件代码,主要功能是打开一个新的activity并向这个activity传参。

holder.tipView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(context,MainActivity2.class);
                intent.putExtra("tx",(int)data.get(position).get("头像"));
                intent.putExtra("名字",data.get(position).get("简介").toString());
                intent.putExtra("介绍",data.get(position).get("介绍").toString());
                context.startActivity(intent);
            }
        });

上面这段代码Myadapter里也有

三、效果展示

最后看一下效果展示
在这里插入图片描述

项目代码地址

  • 20
    点赞
  • 139
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值