天天看點

Android-Fragment實作切換頁面資料的傳遞

在開發app的時候,可能有時候需要将目前視窗中讀入的資料傳遞到下一個視窗中去。

解決這個需求的方法就是使用Bundle 來存儲讀入的資料,然後将bundle傳入到下一個頁面中去

效果圖

Android-Fragment實作切換頁面資料的傳遞
Android-Fragment實作切換頁面資料的傳遞

點選切換後

Android-Fragment實作切換頁面資料的傳遞

第一個HomeFragment代碼

package com.example.navgationdemo03;


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.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_home2, 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 value = editText.getText().toString();
                Bundle bundle = new Bundle();
                bundle.putString("my_string",value);
                if(TextUtils.isEmpty(value)){
                    Toast.makeText(getActivity(),"請輸入消息",Toast.LENGTH_SHORT).show();
                    return;
                }
                NavController controller = Navigation.findNavController(v);
                controller.navigate(R.id.action_homeFragment_to_detailFragment,bundle);
            }
        });
    }
}
//這段代碼重點就在Bundle 那一段
           

第二個Fragment代碼

package com.example.navgationdemo03;


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_detail2, container, false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        TextView textview = getView().findViewById(R.id.textView3);
        String value = getArguments().getString("my_string");
        textview.setText(value);
    }
}
//重點就在getArguments()通過這個方法可以擷取到通過Bundle傳過來的鍵,進而通路這個鍵的值
           
Android-Fragment實作切換頁面資料的傳遞