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

      

      

  • 相关阅读:
    PAT (Advanced Level) 1060. Are They Equal (25)
    PAT (Advanced Level) 1059. Prime Factors (25)
    PAT (Advanced Level) 1058. A+B in Hogwarts (20)
    PAT (Advanced Level) 1057. Stack (30)
    PAT (Advanced Level) 1056. Mice and Rice (25)
    PAT (Advanced Level) 1055. The World's Richest (25)
    PAT (Advanced Level) 1054. The Dominant Color (20)
    PAT (Advanced Level) 1053. Path of Equal Weight (30)
    PAT (Advanced Level) 1052. Linked List Sorting (25)
    PAT (Advanced Level) 1051. Pop Sequence (25)
  • 原文地址:https://www.cnblogs.com/gfwei/p/11784441.html
Copyright © 2011-2022 走看看