RecycleView的跳转设计

RecyclerView页面的点击跳转

要求:在已有RecylerView的基础上实现跳转,目的是掌握activity的生命周期。
主要步骤:
①RecycleView界面的设计布局
由于我们在聊天界面显示,因此在聊天界面拖入RecylerView控件,然后根据自己的喜好设计item的xml文件,我采用的是垂直布局,显示效果如下:
在这里插入图片描述
这个是item的xml文件的具体样式:
在这里插入图片描述
②编写Adapter适配器的相关代码
适配器是建立前端activity显示与数据之间的桥梁,数据通过适配器传给activity。
根据个人需要编写相应的适配器代码:

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.name.setText(data.get(position).get("片名").toString());
        holder.content.setText(data.get(position).get("介绍").toString());
        holder.character.setImageResource((int)(data.get(position).get("封面")));
        holder.changeView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(context,MainActivity2.class);
                intent.putExtra("封面",(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 name;
        TextView content;
        ImageView character;
        LinearLayout changeView;
        public myviewholder( View itemView) {
            super(itemView);
            character = itemView.findViewById(R.id.item_image);
            name=itemView.findViewById(R.id.item_textview1);
            content=itemView.findViewById(R.id.item_textview2);
            changeView=itemView.findViewById(R.id.total_view);
        }
    }
}

③那数据从哪里来,我们把数据放在显示的activity对应的Java文件中,也就是fragment_chat,通过Java文件去配置数据,可以不用在xml文件里去一个一个编辑

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_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 = {"迪迦·奥特曼,日本圆谷特摄剧《迪迦·奥特曼》及其衍生作品中的主角,也是首位拥有形态转化能力的奥特曼。\n" +
                "不同于其他奥特曼的是,迪迦·奥特曼是在地球的超古代时期就已经出现的巨人,但并非是地球出生的奥特曼。他原本是黑暗巨人,也是其中的领袖,后在超古代时期的地球警备队队长幽怜的劝说下弃暗投明,吸收了三个同伴的力量再封印了他们,最终成为光之巨人迪迦·奥特曼。" +.........
               "};
        int[] image = {R.drawable.dijiaaoteman, R.drawable.hongmaolantuqixiazhuan, R.drawable.huolishaonianwang, R.drawable.miqimiaomiaowu, R.drawable.shenchuxiaofugui, R.drawable.wangqiuwangzi, R.drawable.weiqishaonian, R.drawable.xiyangyang, R.drawable.zhonghuaxiaozi};
        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;
    }

④下一步就是设计跳转之后的页面,也就是设计一个新的activity,在新的activity的xml文件选择想要的布局效果
在这里插入图片描述
我们只需要创建了一个activity,当我们点击某个item时,我们可以通过intent传递以及接受数据和参数。在该activity的java文件里接受传来的intent,并利用intent来设置该activity。点击跳转到详细介绍的核心就是使用startActivity()来启动活动,这个函数我们写在适配器Myadapter,因为RecyclerView的数据配置是在Myadapter里面,因此点击跳转的事件也应在Myadapter里。还需要在MainActivity2里面使用finish()来结束掉当前活动来返回主界面的活动,MainActivity1和MainActivity2之间同样需要进行信息传递,所以使用函数putExtra()用来向activity传递一些页面设置参数,使用getStringExtra()来接受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;
    @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.inner_image);
        textView1 = findViewById(R.id.inner_title);
        textView2 = findViewById(R.id.inner_introduction);
        textView1.setText(first);
        textView2.setText(second);
        imageView.setImageResource(intent.getIntExtra("封面", 1));
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity2.this, first, Toast.LENGTH_SHORT).show();
            }
        });
    }
}

效果展示:
点击之后的界面,以第一个item的点击为例
在这里插入图片描述
代码地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值