在開發app的時候,可能有時候需要将目前視窗中讀入的資料傳遞到下一個視窗中去。
解決這個需求的方法就是使用Bundle 來存儲讀入的資料,然後将bundle傳入到下一個頁面中去
效果圖
點選切換後
第一個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傳過來的鍵,進而通路這個鍵的值