Android app开发Activity之间跳转实现(作业2

本文介绍了如何在Android应用中实现在RecyclerView点击事件中跳转到详情Activity,并通过Intent和Bundle传递数据。讲解了设置监听、创建详情界面、使用intent与bundle传值的关键步骤,以及接口在实现这一功能中的作用。此外,还展示了结果截图及代码片段,帮助理解Android应用开发中的Activity交互与数据传递机制。
摘要由CSDN通过智能技术生成

Android app开发Activity之间跳转实现(作业2

实验目的:
(1)对有recycleView的页面进行点击跳转设计。比如,某一tab页是新闻列表,则点击某一行能跳转到新闻详情页面;
(2)本次作业考查的基础原理是对activity的生命周期的理解以及状态转变操作;

一、项目开发关键步骤

由于上一次作业已经利用adapter实现了将数据传输到recyclerview界面。所以这次主要是利用intent传递参数并实现activity之间的跳转。
1、设置一个监听,用于recyclerview中每一个item。
【这里可以在MyAdapter私有类中定义一个接口】

public interface OnItemClickListener{
        public void onItemClick(View view,int position,List<Youth> youthList);
    }

【然后在MyAdapter中的内部类viewholder中继承父接口OnItemClickListener,以下包括接口的声明,调用以及onClick函数的重载中调用父接口OnItemClickListener】

private OnItemClickListener myonItemClickListener;

        public MyYouthAdapterViewHolder(@NonNull View itemView,OnItemClickListener onItemClickListener) {
            super(itemView);
            myImageView_pic=itemView.findViewById(R.id.imageView_pic);
            myTextView=itemView.findViewById(R.id.textView_tag);
            myImageView_favor=itemView.findViewById(R.id.imageView_favor);
            myonItemClickListener=onItemClickListener;
            itemView.setOnClickListener(this);

        }


        @Override
        public void onClick(View view) {
            myonItemClickListener.onItemClick(view,getLayoutPosition(),myYouthList);
        }

【为了使这个接口能被外界访问,可以将它声明成MyAdapter类中的数据成员,然后用setOnItemClickListener()函数来访问它。】

private OnItemClickListener onItemClickListener;
public void setOnItemClickListener(OnItemClickListener onItemClickListener){
        this.onItemClickListener=onItemClickListener;
    }

2、设置好监听之后,需要新建一个activity用来加载详情界面。
【这个界面包括你想要显示的内容,比如图片,文字,状态等等。排版也可以任意设计。】
我这里加载了段文字和两个图片。
activity2.xml
3、下面该考虑如何将recyclerview中item的内容加载到详情页面对应的activity中了。
【这里用到intent和bundle传值。】
(被调activity,即详情界面对应的activity。)

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        textView=findViewById(R.id.textView_detailtag);
        imageView=findViewById(R.id.imageView_detailpic);
        imageView_favor=findViewById(R.id.imageView_detailfavor);
        Intent intent=getIntent();
        Bundle bundle=intent.getExtras();
        imageView.setImageResource(bundle.getInt("item_image"));
        textView.setText(bundle.getString("item_tag"));
        imageView_favor.setImageResource(bundle.getInt("item_favor"));
        imageView_favor.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                imageView_favor.setImageResource(R.drawable.yes);
                Toast.makeText(MainActivity2.this,"收到你的喜欢啦,谢谢@~@",Toast.LENGTH_LONG).show();
            }
        });

(调用的fragment)

public void initYouthRecyclerview(){
        StaggeredGridLayoutManager staggeredGridLayoutManager=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(staggeredGridLayoutManager);
        MyYouthAdapter myyouthAdapter=new MyYouthAdapter(youthList);
        recyclerView.setAdapter(myyouthAdapter);
        myyouthAdapter.setOnItemClickListener(new MyYouthAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position, List<Youth> youthList) {
               // Toast.makeText(getActivity(),"收到你的喜欢啦,谢谢@~@",Toast.LENGTH_LONG).show();
                Log.d("favor","i like it.");
                Intent intent=new Intent(getActivity(),MainActivity2.class);
                Bundle bundle=new Bundle();
                bundle.putInt("item_image",youthList.get(position).getPicture());
                bundle.putString("item_tag",youthList.get(position).getTag());
                bundle.putInt("item_favor",youthList.get(position).getFavor());
                intent.putExtras(bundle);
                startActivity(intent);
            }
        });
    }

二、核心技术

1)intent和bundle

  1. intent用于从一个activity跳转到另一个activity。在调和被调的activity中的intent书写形式不一样。
  2. bundle可以看作一个键值对列表。这个列表非常人性化的地方在于,它的value值可以是整型,char,String各种类型都可。并且每一个value值你可以给它一个名字,方便访问。它和intent配合使用的时候就可以让intent不只是只能带一个值而是可以带多个并且是不同种类的值。简直不要太好!
  3. 学了intent之后我也想了以下为什么之前传值的时候要自己写一个私有类MyAdapter而不是直接用intent。intent和adapter都是传值,这两者之间到底有什么区别??后来我仔细想了想,adpter传值可以看作静态的,即将一系列静态的数据传到我们写的界面中,我们不需要两个activity之间调用就可以将数据传入;而intent是在我们操作activity的过程中传值的工具,它传值的条件建立在一个activity调用另一个activity的过程中。所以这两者区别还是挺大的。

2)接口:这里我写的接口主要起到的作用是能在我写的详情activity中重写onItemClickListener()函数。由于接口的多继承特性,造成它可以被ViewHolder继承,被mainactivity继承。

3)Imgeview圆角设计
在imageview外面包一个cardview。

<androidx.cardview.widget.CardView
app:cardCornerRadius="20dp"
app:cardElevation="0dp"

为了让imageview适应桌面大小,可以给imageview设置相应属性。

android:scaleType="fitXY"
android:adjustViewBounds="true"

三、结果展示

点击进入详情。
在这里插入图片描述
圆角imageview。

在这里插入图片描述

四、gitee仓库

作业2:branch_main

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值