zoukankan      html  css  js  c++  java
  • 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);
        }
    }
    复制代码

      运行结果:如果没有输入会提示

      

      输入成功:

      

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

      

  • 相关阅读:
    澳洲中产收入水平[转]
    [转载]在澳洲做IT人士的收入差别
    取消excel 工作保护 密码的宏
    SAP ML 物料分类账详解(含取消激活物料帐方法)
    ABAP--如何创建自定义打印条码
    SAP 产品条码WMS结合 以及ABAP script的集成 BarCode
    SAP 以工序为基准进行发料 机加工行业 Goods Issue to Routing
    SAP HR模块的基础数据表和增强配置
    SAP财务供应链与金库管理的联系与区别
    评点SAP HR功能及人力资源管理软件
  • 原文地址:https://www.cnblogs.com/hrzgj/p/14850486.html
Copyright © 2011-2022 走看看