Android作业2:

目标:

1.根据第一次作业的源码基础,在列表页上点击跳转到另一详情页

2.在实现列表效果的fragment页中实现点击列表跳转到另一详情页

3.博客末尾写明项目源码线上仓库地址

实现的具体效果如下动图所示:

点击列表元素后会跳转到详情页,并可通过返回按钮来返回主界面

实验过程及主要代码解释:

技术说明:

        这次实验相较上次实验,主要需要新增1个点击跳转后的页面XML和一个设置新增界面返回键点击监听和显示详情页内容的java文件,Myadapter中的点击监听,和Main_Activity的OnActivityResult()。

资源文件(底部图标图片):

实验中要设置XML文件一览(activity_main是创建项目自动生成的不用管)

实验中要编写的java文件一览(main_activity是自动生成的可忽略):

上次已经提到的布局设计和java代码编写就不说了,只说加和改的东西,完整代码可以去最底部git地址看。

布局设计

main_activity2.xml

这个界面是点击会跳转到的页面,在这个页面我们设置了一个TextView和Button分别用来显示详情页面信息和做按钮的点击返回监听。

  <TextView
        android:id="@+id/text"
        android:gravity="center"
        android:textSize="20sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <Button
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:text="返回"/>

这个没啥好说的,就是把布局效果弄出来,大多都是上次用到过的设置

控件:

界面效果:

其他XML布局文件和上次保持一致即可

JAVA代码编写:

(具体的关键代码解析都放在注释里了,这里同样只说需要变动的)

Mainactivity1.java

主要在于多加了一个onActivityResult()方法,关键代码行解析见注释

/*   在进行界面间的跳转和传递数据的时候,我们有的时候要获得跳转之后界面传递回来的状态,数据等信息。
    这个时候,我们不一定需要使用Intent进行跳转回原先设置的界面,而是使用onActivityResult方法就可以解决这个问题。*/
 /*   requestCode: 请求码,对应你在startActivityForResult(Intent intent, int requestCode)中传入
 ,该参数的作用是让你在有多个activity返回结果时,能判断是哪一个activity返回。
    resultCode:返回码,通过该参数判断子activity返回的状态,有OK,CANCELED,RESULT_FIRST_USER等,
    本质上是子Activity的一个实例变量 int mResultCode,该变量在定义时就被赋值为RESULT.CANCELED,因此默认返回RESULT.CANCELED 可通过setResult(int resultCode)修改
    data:用来传递数据,对应子Activity的一个实例变量Intent mResultData,初始化为null,可通过setResult(int resultCode, Intent data)修改。*/

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //在调用系统activity时返回时,如果请求码为1,RESULT_OK代表成功。
        if(requestCode==1 && resultCode== Activity.RESULT_OK){
            Toast.makeText(this, data.getStringExtra("text"), Toast.LENGTH_SHORT).show();
           /* Toast 是一个 View 视图,快速的为用户显示少量的信息。
            Toast 在应用程序上浮动显示信息给用户,它永远不会获得焦点,不影响用户的输入等操作,主要用于 一些帮助 / 提示。
            Toast 最常见的创建方式是使用静态方法 Toast.makeText*/
           /* Toast.LENGTH_SHORT表示显示时间较短*/

        }
    }
}

Mainactivity2.java

(这个主要用于控制显示详情页并设置返回按钮的点击监听)

package com.example.myhomework02;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;


//直接使用Activity作为事件监听器,实现监听器的接口.
public class MainActivity2 extends AppCompatActivity  {


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

        String text = getIntent().getStringExtra("text");
        TextView tv = findViewById(R.id.text);
        tv.setText(text);
/*
        设置main_activity2中的返回botton点击监听*/
        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.putExtra("text",text);
                //设置切换后的详情页的信息为text
                setResult(Activity.RESULT_OK,intent);
                //在MAIN_activity2中回传数据时采用setResult方法,并且之后要调用finish方法。
                finish(); //点击返回后详情页生命周期就销毁
            }
        });
    }

}

Myadpter.java(主要在这个类设置跳转到详情页的点击监听)

package com.example.myhomework02;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.List;
import java.util.zip.Inflater;

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

    Activity context1;
    List<String> list1;
   /* private Myadapter.OnItemClickListener mClickListener;//自定义的接口*/
    //构造函数
    public Myadapter(Activity context,List list){
        context1=context;
        list1=list;

    }
    @NonNull
    @Override
    //在RecyclerView控件中,当需要新的View来展示列表项时,
    // RecyclerView首先会调用Adapter中的onCreateViewHolder方法,
    // 来创建一个ViewHolder并绑定相应的View。ViewHolder对象会缓存在RecyclerView中,以便重复利用
    public Myholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        //LayoutInflater是用来找layout下xml布局文件,并且实例化,对于想要动态加载的界面,需要使用LayoutInflater.inflate()来载入。
        View view=LayoutInflater.from(context1).inflate(R.layout.item,parent,false);
        //需要加载资源的id为R.layout.item
        Myholder myholder=new Myholder(view);
        return myholder;

       /* return new RecyclerView.ViewHolder(view, mClickListener);*/
    }

    @Override
    //onBindViewHolder方法会在RecyclerView进入屏幕时调用
    public void onBindViewHolder(@NonNull Myholder holder, int position) {
        holder.textView.setText(list1.get(position)); //将textView和相应位置的list绑定在一起
        holder.textView.setOnClickListener(new View.OnClickListener() {
            //设置点击监听
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context1, MainActivity2.class);
                intent.putExtra("text",list1.get(position));
                context1.startActivityForResult(intent,1);
                //如果想在Activity中得到新打开Activity 关闭后返回的数据,
                // 需要使用系统提供的startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,
                // 新的Activity关闭后会向前面的Activity传回数据,为了得到传回的数据,
                // 必须在前面的Activity中重写onActivityResult(int requestCode, int resultCode, Intent data)方法。
            }
        });
    }


    @Override//返回条目的个数
    public int getItemCount() {
        return list1.size();
    }
    public class Myholder extends RecyclerView.ViewHolder{
        TextView textView;

        public Myholder(@NonNull View itemView) {
            super(itemView);
            textView=itemView.findViewById(R.id.textView10);
            //根据item.xml里id为textView10的textView作为textView的值
        }
    }

}

实验小结

        这次实验中,我通过在列表页的Fragment中实现了点击列表项跳转到详情页的功能。当用户点击列表中的某一项时,我们可以通过设置RecycleView的ISetOnClickListener来监听点击事件,并获取点击项的信息。其中,我们可以使用Intent来传递数据,并通过startActivity方法启动详情页的Activity,从而实现跳转。为了实现高效的列表展示,我们选择了使用RecycleView来展示数据。RecycleView是Android中常用的列表控件,它能够高效地管理和展示大量数据,并提供了灵活的ViewHolder等功能。我们可以通过定义Adapter来处理列表中的数据,并将Adapter与RecycleView进行绑定。
        通过本次实验,我们成功设计了一个App的门户框架,并实现了Tab切换、列表展示以及点击跳转到详情页并返回的功能。这些功能的实现不仅借助了Activity、XML和Fragment等技术,还充分利用了RecycleView作为高效的列表展示控件。
        最后,在博客的末尾是提供了项目源码的线上仓库地址。



项目源码线上仓库地址:

chen/androidhomework2 - Gitee.com

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值