android------页面切换到传递数据

贵有恒,何必三更起、五更眠、最无益,只怕一日曝、十日寒。这篇文章主要讲述android------页面切换到传递数据相关的知识,希望能为你提供帮助。
今天简单的学习了页面的切换和界面之前的数据传递。

页面切换需要用到Navigation。Navigation 是 JetPack 中的一个组件,用于方便的实现页面的导航,所以抽象出了一个 destination 的概念,大部分情况一个 destination 就表示一个 Fragment,但是它同样可以指代 Activity、其它的导航图。
最初要有个起始页面,叫 start destination,处于栈底,是启动时的第一个页面,当然也是返回可见的最后一个页面。多个 destination 连接起来就组成了一个导航图,类似于一种栈结构,页面先进后出。destination 之间的连接叫做 action。

首先想在java目录 

android------页面切换到传递数据

文章图片
  new两个Fragment,选择
android------页面切换到传递数据

文章图片
(这是最简单的Fragment),然后再在res文件夹new一个
android------页面切换到传递数据

文章图片

 

,名字随便,类似是Nagivation。Nagivation里会有生成的xml文件,点进去,选择
android------页面切换到传递数据

文章图片
,将刚刚创建的两个Fragment拉进来(首先进来的是首页面,也可以转换,右键选择一个Fragemnt,选择
android------页面切换到传递数据

文章图片
就可以了)。然后将两个Fragment连起来。从首页连接到跳转页面。设计Fragment时,习惯把Fragment变成Constraint.设计完成后在activity_main.xml,清楚多余的Palette,将
android------页面切换到传递数据

文章图片
拉入到ConstraintLayout里即可。然后就剩下代码操作。
 

首页界面:有个BUTTON,通过button进入另一个界面。
android------页面切换到传递数据

文章图片

 

 
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------页面切换到传递数据

文章图片

 
 
输入成功:
 
android------页面切换到传递数据

文章图片

 

  另一个页面显示输入名字:

android------页面切换到传递数据

文章图片

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
【android------页面切换到传递数据】

    推荐阅读