zoukankan      html  css  js  c++  java
  • 安卓基础(页面导航传递数据)

    今天学习了关于页面导航数据传递的知识,它可以有三种方法,前两种比较适合传递静态数据,最后一种则是复杂的动态数据传递。下面我来一次说一下三种方法:

    第一种:打开新建navigation文件夹中的xml的图形界面。

     在图形界面中点击一个界面,然后右边的Arguments是参数的意思,点击加号就可以创建参数。

     之后再页面得java文件中,getArArguments()获取参数,然后再界面输出就可以了。

            String s = getArguments().getString("name");
    
            TextView textView = getView().findViewById(R.id.textView);
            textView.setText(s);

    第二种:点击页面连接线,即上图得连线,在右边Argument Default Values 中设置参数值,直接可以和第二种方法一样,在末端界面获取参数值来输出。

     但是需要注意,我在连线的初始界面对按钮的监听,中用的是action,即R.id.action....。

    getView().findViewById(R.id.button).setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_home_Fragment_to_detail_Fragment));

    如果直接像下面一样,R.id.末端页面。界面点击按钮依然可以跳转,但是未激活那条连线的函数,获取不到参数值。

    getView().findViewById(R.id.button).setOnClickListener(Navigation.createNavigateOnClickListener(R.id.detail_Fragment));

    第三种:我用我的实例来说明第三种方法。我在初始界面上设置了一个输入框,然后点击按钮,将输入值传入到第二个跳转界面之中。

    Home_Fragment:获取edittext的输入值,创建Bundle对象,将输入值传过去。

    package com.example.navigation;Bu
    
    import android.os.Build;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.text.TextUtils;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    import androidx.navigation.NavController;
    import androidx.navigation.Navigation;
    
    
    /**
     * A simple {@link Fragment} subclass.
     */
    public class Home_Fragment extends Fragment {
    
        public Home_Fragment() {
            // 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 s = editText.getText().toString();
                     if(TextUtils.isEmpty(s)){
                         Toast.makeText(getActivity(),"请输入名字",Toast.LENGTH_SHORT).show();
                         return ;
                     }
                     Bundle bundle = new Bundle();
                     bundle.putString("myname",s);
                     NavController controller = Navigation.findNavController(v);
                     controller.navigate(R.id.action_home_Fragment_to_detail_Fragment,bundle);
                 }
             });
    
    
    
        }
    }

    Detail_Fragment:获取参数值,在页面输出。

    package com.example.navigation;

    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;

    import androidx.navigation.Navigation;

    import javax.xml.namespace.QName;


    /**
    * A simple {@link Fragment} subclass.
    */
    public class Detail_Fragment extends Fragment {

    public Detail_Fragment() {
    // 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);

    String s = getArguments().getString("myname");
    TextView textView = getView().findViewById(R.id.textView);
    textView.setText(s);
    // String s = getArguments().getString("name");
    // TextView textView = getView().findViewById(R.id.textView);
    // textView.setText(s);
    }
    }

    Main_Activity:设置末端页面的返回箭头,令其点击箭头可返回上一级。

    package com.example.navigation;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    
    import androidx.navigation.NavController;
    import androidx.navigation.Navigation;
    import androidx.navigation.ui.NavigationUI;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            NavController navController =Navigation.findNavController(this,R.id.fragment);
            NavigationUI.setupActionBarWithNavController(this,navController);
        }
    
        @Override
        public boolean onSupportNavigateUp() {
            NavController navController = Navigation.findNavController(this,R.id.fragment);
            return navController.navigateUp();
        }
    }

    Home_Detail截图:

  • 相关阅读:
    在微信小程序中使用富文本转化插件wxParse
    在微信小程序的JS脚本中使用Promise来优化函数处理
    结合bootstrap fileinput插件和Bootstrap-table表格插件,实现文件上传、预览、提交的导入Excel数据操作流程
    基于Metronic的Bootstrap开发框架经验总结(16)-- 使用插件bootstrap-table实现表格记录的查询、分页、排序等处理
    python 垃圾回收——分代回收 和java有些区别 注意循环引用无法被回收
    python del语句作用在变量上,而不是数据对象(常量)上
    for循环中的lambda与闭包——Python的闭包是 迟绑定 , 这意味着闭包中用到的变量的值,是在内部函数被调用时查询
    Python-try except else finally有return时执行顺序探究——finally语句无论如何也是会执行的
    你所不知道的Python | 字符串连接的秘密——连接大量字符串时 join和f-string都是性能最好的选择
    十大经典排序算法
  • 原文地址:https://www.cnblogs.com/yangxionghao/p/12311299.html
Copyright © 2011-2022 走看看