Android Studio实现在列表页上点击跳转

目录

作业目标

技术说明

关键代码

activity_vx.xml(详情页面):

Album.java:

Myadapter2.java:

fragment1.java:

Activityvx.java:

运行效果:

实验心得:

源码:


作业目标

        根据第一次作业的源码基础,在列表页上点击跳转到另一详情页面。在我第一次作业的源码中修改,即目标为在fragment1对应的页面中,点击专辑封面图,跳转到显示专辑名称以及其主打歌的详情页面中。

技术说明

  1. intent:轻量级的进程间通信机制,实现跨进程组件通信和发送系统广播。在fragment1的点击监听中,将消息(专辑名和主打曲)就封装在intent中,并发送给详情页面。
  2. context:一个抽象类,提供startActivity()方法,intent可以作为该方法的参数,从而实现窗体之间的跳转。

关键代码

  • activity_vx.xml(详情页面):

布局方式设置为ConstraintLayout,然后添加2个textView控件和一个button控件,textViewvx1用于存放传入的专辑名,textViewvx2用于存放传入的主打曲,button用于返回到列表页面;修改xml文件的各个参数,使页面布局更加美观。

<TextView
        android:id="@+id/textViewvx1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="TextView"
        android:textColor="#FFFFFF"
        android:textSize="60sp"
        android:textStyle="bold"
        android:typeface="serif"
        app:layout_constraintBottom_toTopOf="@+id/textViewvx2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textViewvx2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textColor="#C89292"
        android:textSize="45sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="返回"
        android:textSize="30sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textViewvx2" />

效果如下:

  • Album.java:

新增了song变量,用于存放每张专辑对应的主打曲名称,并且设置了getSong()函数,可以通过调用函数得到主打曲的信息。

代码增加如下:

private String song;

public Album(String name,int imageid,String song){
        this.name=name;
        this.imageid=imageid;
        this.song=song;
    }

public String getSong() { return song; }

  • Myadapter2.java:

由于窗体的跳转需要使用到context,因此在Myadapter2中增加了context1,并将对应代码进行修改。

    Context context1;
    // 传入值
    public Myadapter2(List list,Context context) {
        list1=list;
        context1=context;
    }


    @NonNull
    @Override
    public Viewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        // 压缩器(from生成静态压缩器)
        // 闪退时可以挂布尔值false运行
        View view=LayoutInflater.from(context1).inflate(R.layout.item1,parent,false);
        Viewholder viewholder=new Viewholder(view);
        return viewholder;
    }

然后在onBindViewHolder()函数中对控件imageView做点击监听,实现点击专辑封面图,跳转到对应专辑的详情页面中。

        holder.imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(context1,Activityvx.class);
                // 向activityvx传入专辑名和主打曲
                intent.putExtra("name", album.getName());
                intent.putExtra("song", album.getSong());
                context1.startActivity(intent);
            }
        });

  • fragment1.java:

因为前面对Album.java和Myadapter2.java都进行了修改,因此在fragment1中也要做出对应的修改。

首先是在Album的list中增加专辑主打曲的数据:

        Album thestorybegins = new Album(getRandomLengthName("The Story Begins"),
                R.drawable.tsb,
                getRandomLengthName("Like Ooh-Ahh"));
        list.add(thestorybegins);

        Album pagetwo = new Album(getRandomLengthName("Page Two"),
                R.drawable.cheerup,
                getRandomLengthName("CHEER UP"));
        list.add(pagetwo);

        Album lane1 = new Album(getRandomLengthName("Twicecoaster:Lane1"),
                R.drawable.tt,
                getRandomLengthName("TT"));
        list.add(lane1);

        Album lane2 = new Album(getRandomLengthName("Twicecoaster:Lane2"),
                R.drawable.knock,
                getRandomLengthName("Knock Knock"));
        list.add(lane2);

        Album signal = new Album(getRandomLengthName("Signal"),
                R.drawable.sig,
                getRandomLengthName("Signal"));
        list.add(signal);

        Album twicetagram = new Album(getRandomLengthName("Twicetagram"),
                R.drawable.likey,
                getRandomLengthName("Likey"));
        list.add(twicetagram);

        Album merryhappy = new Album(getRandomLengthName("Merry&Happy"),
                R.drawable.mh,
                getRandomLengthName("Heart Shaker"));
        list.add(merryhappy);

        Album whatislove = new Album(getRandomLengthName("What Is Love"),
                R.drawable.wil,
                getRandomLengthName("What is Love"));
        list.add(whatislove);

        Album summernights = new Album(getRandomLengthName("Summer Nights"),
                R.drawable.sn,
                getRandomLengthName("Dance The Night Away"));
        list.add(summernights);

        Album yesoryes = new Album(getRandomLengthName("YES or YES"),
                R.drawable.yoy,
                getRandomLengthName("YES or YES"));
        list.add(yesoryes);

        Album fancyyou = new Album(getRandomLengthName("FANCY YOU"),
                R.drawable.fancy,
                getRandomLengthName("FANCY"));
        list.add(fancyyou);

        Album feelspecial = new Album(getRandomLengthName("Feel Special"),
                R.drawable.fs,
                getRandomLengthName("Feel Special"));
        list.add(feelspecial);

        Album moremore = new Album(getRandomLengthName("MORE&MORE"),
                R.drawable.mm,
                getRandomLengthName("MORE & MORE"));
        list.add(moremore);

        Album eyeswideopen = new Album(getRandomLengthName("Eyes Wide Open"),
                R.drawable.ewo,
                getRandomLengthName("I CAN'T STOP ME"));
        list.add(eyeswideopen);

        Album tasteoflove = new Album(getRandomLengthName("Taste Of Love"),
                R.drawable.tol,
                getRandomLengthName("Alcohol-Free"));
        list.add(tasteoflove);

        Album formulaoflove = new Album(getRandomLengthName("Formula Of Love:O+T=<3"),
                R.drawable.fol,
                getRandomLengthName("SCIENTIST"));
        list.add(formulaoflove);

        Album between12 = new Album(getRandomLengthName("BETWEEN 1&2"),
                R.drawable.ttt,
                getRandomLengthName("Talk that Talk"));
        list.add(between12);

        Album readytobe = new Album(getRandomLengthName("READY TO BE"),
                R.drawable.rtb,
                getRandomLengthName("SET ME FREE"));
        list.add(readytobe);

然后要增加context变量并赋值,并且和list一起被Myadapter2调用。

Context context;

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState){

        context=this.getActivity();

        // 此处将无关代码省略

        // 适配器
        ma=new Myadapter2(list,context);

  • Activityvx.java:

详情页面所对应的activity文件。在activity组件的onCreate方法中,对Myadapter2中定义的点击监听进行了接收,并且将传入的数据存放进textView控件中;对button控件进行点击监听,当用户点击button,则退回到RecyclerView页面中去。

package com.example.myapplication;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

public class Activityvx extends AppCompatActivity {
    TextView textView1,textView2;

    Button button;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_vx);

        // 接收Myadapter2的传值
        textView1=findViewById(R.id.textViewvx1);
        textView2=findViewById(R.id.textViewvx2);
        Intent intent=getIntent();
        textView1.setText(intent.getStringExtra("name"));
        textView2.setText(intent.getStringExtra("song"));

        // 退回fragment1的列表界面
        button=findViewById(R.id.button5);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });
    }
}

运行效果:

实验心得:

        本次实验使我对于activity的生命周期有了更加深刻的了解,同时,在对Myadapter2.java文件进行修改的时候,我掌握了context的使用时机和使用方法,我发现如果要在Myadapter2中之间进行点击监听,那么必须传入context变量,如果只是强制将list1转换为context类型,在点击专辑封面图时跳转页面会失败。在编译Activityvx.java文件时,一开始我错误地对intent进行了初始化,即写入了Intent intent=new Intent(),而运行时我发现详情页面中始终没有数据传入和显示,检查过后我发现在Activityvx中的intent用于接收Myadapter2传入的intent,因此不应该初始化,而应该调用getIntent(),从而接收来自Myadapter2的传值。

源码:

test2: 移动开发技术第二次作业

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值