• Android Studio 之 Navigation【2.数据的传递】


    Android Studio 之 Navigation【2.数据的传递和过渡动画】

    在资源navigation资源的xml文件中,在【目标界面】 detialFragment中点击,在右边 Arguments 中添加参数 name=李江南

    添加这个name参数后,在箭头 Action 上点击,会在右边的 Argument 中显示这个name变量

     

    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 controller = Navigation.findNavController(v);
    
                    //这样也可以直接导航到 Detial 界面,直接调用这个界面的话,navigation中设置的参数将传递不过来
                    //这样直接调用的是 my_nav.xml中 detialFragment 中右边设置的参数【李江南】
                    controller.navigate(R.id.detialFragment);
    
                    //可以将 navigation 中的参数传递过来
                    //这样调用,会将 箭头 Action 中设置的参数传递过去【张无忌】
                    //controller.navigate(R.id.action_homeFragment_to_detialFragment);
                }
            });
        }
    

      

    动态传递参数

    HomeFragment.java 文件

    package com.example.navigationdemo2;
    
    
    import android.os.Bundle;
    import android.text.TextUtils;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.EditText;
    import android.widget.Toast;
    
    import androidx.annotation.Nullable;
    import androidx.fragment.app.Fragment;
    import androidx.navigation.NavController;
    import androidx.navigation.Navigation;
    
    
    /**
     * 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 controller = Navigation.findNavController(v);
    
                    //动态传递参数
                    EditText editText = getView().findViewById(R.id.editText);
                    String s = editText.getText().toString();
                    if(TextUtils.isEmpty(s)){
                        Toast.makeText(getActivity(), "请输入名字!", Toast.LENGTH_SHORT).show();
                        return;
                    }
    
                    //将参数放在 Bundle 中
                    Bundle bundle = new Bundle();
                    bundle.putString("my_name",s);
                    NavController navController = Navigation.findNavController(v);
                    controller.navigate(R.id.action_homeFragment_to_detialFragment,bundle);//第2个带参数
                }
            });
        }
    }
    

      

    在 DetialFragment.java中接收参数

    package com.example.navigationdemo2;
    
    
    import android.os.Bundle;
    import android.text.TextUtils;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    import androidx.annotation.Nullable;
    import androidx.fragment.app.Fragment;
    
    
    /**
     * A simple {@link Fragment} subclass.
     */
    public class DetialFragment extends Fragment {
    
    
        public DetialFragment() {
            // 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_detial, container, false);
        }
    
        @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
    
            TextView textView = getView().findViewById(R.id.textView);
           //获取参数【这个参数是在 资源navigation中的detial的fragment中右边参数界面添加的】
            String strName = getArguments().getString("name");
    
           //获取动态参数 String my_name = getArguments().getString("my_name");   
            if(!TextUtils.isEmpty(my_name)) {
                textView.setText(my_name);
            }
            else
            {
                textView.setText(strName);
            }
    
        }
    }
    

      

      

  • 相关阅读:
    Python学习记录x(虚拟环境)
    Python学习记录6(模块)
    Python学习记录4(python高级特性)
    Python学习记录3
    Python学习记录2
    Git使用小记(Windows)
    Git进入vi后如何保存并退出(Windows)
    python和OpenCV获取和改变图片的尺寸并处理视频
    Faster R-CNN检测模型的环境搭建(Ubuntu,caffe)
    【C++】查找算法和排序算法
  • 原文地址:https://www.cnblogs.com/gfwei/p/11784441.html
Copyright © 2020-2023  润新知