贵有恒,何必三更起、五更眠、最无益,只怕一日曝、十日寒。这篇文章主要讲述android------页面切换到传递数据相关的知识,希望能为你提供帮助。
今天简单的学习了页面的切换和界面之前的数据传递。
页面切换需要用到Navigation。Navigation 是 JetPack 中的一个组件,用于方便的实现页面的导航,所以抽象出了一个 destination 的概念,大部分情况一个 destination 就表示一个 Fragment,但是它同样可以指代 Activity、其它的导航图。
最初要有个起始页面,叫 start destination,处于栈底,是启动时的第一个页面,当然也是返回可见的最后一个页面。多个 destination 连接起来就组成了一个导航图,类似于一种栈结构,页面先进后出。destination 之间的连接叫做 action。
首先想在java目录
文章图片
new两个Fragment,选择
文章图片
(这是最简单的Fragment),然后再在res文件夹new一个
文章图片
,名字随便,类似是Nagivation。Nagivation里会有生成的xml文件,点进去,选择
文章图片
,将刚刚创建的两个Fragment拉进来(首先进来的是首页面,也可以转换,右键选择一个Fragemnt,选择
文章图片
就可以了)。然后将两个Fragment连起来。从首页连接到跳转页面。设计Fragment时,习惯把Fragment变成Constraint.设计完成后在activity_main.xml,清楚多余的Palette,将
文章图片
拉入到ConstraintLayout里即可。然后就剩下代码操作。
首页界面:有个BUTTON,通过button进入另一个界面。
文章图片
package com.example.navigation2; import android.os.Bundle; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.navigation.NavController; import androidx.navigation.Navigation; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; /** * A simple {@link Fragment} subclass. */ public class HomeFragment extends Fragment {public HomeFragment() { // Required empty public constructor }@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_home, container, false); }@Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); getView().findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {NavController navController = Navigation.findNavController(v); navController.navigate(R.id.action_homeFragment_to_detailFragment); } }); } }
这样就完成了简单的界面跳转。
简单数据传递(int、String等):在主界面输入名字,在另一个界面显示名字。
主界面代码:
package com.example.navigation2; import android.os.Bundle; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.navigation.NavController; import androidx.navigation.Navigation; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; /** * A simple {@link Fragment} subclass. */ public class HomeFragment extends Fragment {public HomeFragment() { // Required empty public constructor }@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_home, container, false); }@Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); getView().findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { EditText editText = getView().findViewById(R.id.editText); String name = editText.getText().toString(); // 如果名字为空,则返回 if(TextUtils.isEmpty(name)){ Toast.makeText(getActivity(), "请输入名字", Toast.LENGTH_SHORT).show(); return; }Bundle bundle = new Bundle(); // 将名字存入bundle bundle.putString("my_name", name); // 跳转页面 NavController navController = Navigation.findNavController(v); navController.navigate(R.id.action_homeFragment_to_detailFragment,bundle); } }); } }
另一个界面:
package com.example.navigation2; import android.os.Bundle; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; /** * A simple {@link Fragment} subclass. */ public class DetailFragment extends Fragment {public DetailFragment() { // Required empty public constructor }@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_detail, container, false); }@Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // 获取my_name的值 String name = getArguments().getString("my_name"); TextView textView= getView().findViewById(R.id.textView); textView.setText(name); } }
运行结果:如果没有输入会提示
文章图片
输入成功:
文章图片
另一个页面显示输入名字:
文章图片
【android------页面切换到传递数据】
推荐阅读
- Appium-desktop & Appium 安装
- Android功耗统计算法
- 安卓基础(点击事件)
- Android常用布局和控件
- 寒假学习进度一(安卓配置环境的搭建和hello world)
- Room----Android数据库(SQLite)
- Android开发初体验
- Android编程权威指南(第2版)--第16章 使用intent拍照 挑战练习
- Android多模块混淆的问题