IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android app开发Activity之间跳转实现(作业2 -> 正文阅读

[移动开发]Android app开发Activity之间跳转实现(作业2

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

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-10-27 12:56:47  更:2021-10-27 12:58:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:45:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码