Tôi đang bắt đầu một Hoạt động thông qua các phương tiện thông thường:Fragments onCreateView() bundle. Nó đến từ đâu?
Intent startIntent = new Intent(this, DualPaneActivity.class);
startIntent.putExtras(((SearchPageFragment) currentFragment).getPageState());
startActivity(startIntent);
Khi hoạt động này tải, nó đặt một Fragment trong một khung như vậy:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Fragment currentFragment = fragment;
currentFragment.setArguments(getIntent().getExtras());
transaction.replace(R.id.singlePane, currentFragment);
transaction.commit();
Có vẻ đơn giản, phải không?
Tuy nhiên, bạn có thể bên trong onCreateView() truy cập phương pháp ba bó riêng biệt (bốn, nếu bạn bao gồm một trong những bao gồm trong của Fragment onCreate(Bundle savedInstanceState)
):
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
// Fill state information
Bundle bundle;
if(savedInstanceState != null) bundle = savedInstanceState; // 1
else if(getArguments() != null) bundle = getArguments(); // 2
else bundle = getActivity().getIntent().getExtras(); // 3
setPageState(bundle);
}
Trong ví dụ ở trên, tôi đã làm việc ra từ thử nghiệm và lỗi mà gói tôi muốn là gói thứ hai, gói được truy xuất từ .
Từ hiểu biết của tôi, câu hỏi thứ ba từ getActivity().getIntent().getExtras();
thực sự gọi Bundle từ mục đích được sử dụng để bắt đầu chứa hoạt động. Tôi cũng biết từ thử nghiệm rằng savedInstanceState
dường như luôn là rỗng. Nhưng nó đến từ đâu và lý do tại sao là nó không?
Các documentation nói điều này:
savedInstanceState Nếu không null, đoạn này đang được tái xây dựng từ một trạng thái đã lưu trước khi đưa ra ở đây.
Điều đó không giúp ích cho tôi - Điều đó làm tôi khó chịu hơn là không cho tôi tiếp tục. Ai đó có thể giúp tôi với sự khó chịu này?