一,简介:navigation简化(管理)Fragment操作

// https://mvnrepository.com/artifact/androidx.navigation/navigation-fragment    implementation group: 'androidx.navigation', name: 'navigation-fragment', version: '2.0.0'// https://mvnrepository.com/artifact/androidx.navigation/navigation-ui    implementation group: 'androidx.navigation', name: 'navigation-ui', version: '2.0.0'

先看看图:

直接看步骤:
第一步新建XML文件

内容:

<?xml version="1.0" encoding="utf-8"?>                                                        

Xml直接拖拽 里面的代码自动生成,需要记住action的id即可,后面会用

MainActivity.

public class MainActivity extends AppCompatActivity {    private DataViewModel model;    ActivityMainBinding binding;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        binding= DataBindingUtil.setContentView(this,R.layout.activity_main);        model = ViewModelProviders.of(this).get(DataViewModel.class);    }    @Override    public boolean onSupportNavigateUp() {        return true;    }}

Xml

              

FragmentThere

public class ThereFragment extends Fragment {    FragmentThereBinding binding;    @Nullable    @Override    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable final Bundle savedInstanceState) {        binding = DataBindingUtil.inflate(inflater, R.layout.fragment_there, container, false);        View view = binding.getRoot();        binding.anniu1.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {            //穿值过去                Bundle bundle = new Bundle();                bundle.putString("one", "这是一条很大的船");                Navigation.findNavController(view).navigate(R.id.action_thereFragment2_to_oneFragment2, bundle);            }        });        binding.anniu2.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {            //穿值过去                Bundle bundle = new Bundle();                bundle.putString("two", "这是大海!");                Navigation.findNavController(view).navigate(R.id.action_thereFragment2_to_twoFragment2,bundle);            }        });        binding.anniu3.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {            //返回                Navigation.findNavController(view).navigateUp();            }        });        return view;    }}

FragmentOne

public class OneFragment extends Fragment {    FragmentOneBinding binding;    @Nullable    @Override    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        binding = DataBindingUtil.inflate(inflater, R.layout.fragment_one, container, false);        Bundle bundle=getArguments();        String data=bundle.getString("one");        binding.tvname.setText(data);        binding.fanhui.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                   //第一種返回//                Navigation.findNavController(view).navigate(R.id.action_oneFragment2_to_thereFragment2);                //第二種返回//                Navigation.findNavController(getView()).popBackStack();                //第三種返回                Navigation.findNavController(getView()).navigateUp();                //popBackStack() 如果当前的返回栈是空的就会报错,因为栈是空的了,navigateUp() 则不会,还是停留在当前界面            }        });        return binding.getRoot();    }}

至于XML 自己随便写。就不贴了
重点代码
1,单纯跳转

id:目的的ID,也就是Action动作的ID。 Navigation.findNavController(view).navigate(R.id.action_thereFragment2_to_oneFragment2); 2,带数据跳转
    Bundle bundle = new Bundle();                bundle.putString("two", "这是大海!");                Navigation.findNavController(view).navigate(R.id.action_thereFragment2_to_twoFragment2,bundle);              

3.接收

      Bundle bundle=getArguments();        String data=bundle.getString("one");

4,返回

     //第一種返回//                Navigation.findNavController(view).navigate(R.id.action_oneFragment2_to_thereFragment2);                //第二種返回//                Navigation.findNavController(getView()).popBackStack();                //第三種返回                Navigation.findNavController(getView()).navigateUp();                //popBackStack() 如果当前的返回栈是空的就会报错,因为栈是空的了,navigateUp() 则不会,还是停留在当前界面

更多相关文章

  1. Android(安卓)开发之webview页面返回到最顶关闭
  2. android判断网络
  3. android studio 使用getActionBar返回NULL
  4. Android(安卓)万年历日期选择器
  5. Android(安卓)列表之分组ListView
  6. Android实现两次按下返回键退出
  7. Android与Js交互获取返回值
  8. Android(安卓)Service 之 Bound Services
  9. Android(安卓)代码中实现返回键功能

随机推荐

  1. Android异步更新UI的方式之使用Handler消
  2. Android(安卓)WebView 常见的九个问题
  3. AS(android studio) 添加第三方库时报,Err
  4. 初学Android的一些注意事项
  5. android 手机UDP 接受不到数据
  6. Android应用程序获取system权限
  7. 安卓修改屏幕超时后,系统不进入休眠的方法
  8. Error generating final archive: Debug
  9. Android实现手写签名
  10. AndroidStudio插件集合