To, co robię, i uważam, że to jest to, co Google zamierzał zrobić również dla programistów, to nadal uzyskać dodatki od Intent
w postaci Activity
, a następnie przekazać dodatkowe dane na fragmenty, tworząc je za pomocą argumentów.
Na blogu deweloperów systemu Android jest rzeczywiście an example, który ilustruje tę koncepcję, a zobaczysz to również w kilku demach interfejsu API. Mimo że ten konkretny przykład jest podany dla fragmentów API 3.0+, ten sam przepływ dotyczy używania FragmentActivity
i Fragment
z biblioteki pomocy.
najpierw odzyskać zamiarem dodatki jak zwykle w swojej działalności i przekazać je jako argumenty do fragmentu:
public static class DetailsActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// (omitted some other stuff)
if (savedInstanceState == null) {
// During initial setup, plug in the details fragment.
DetailsFragment details = new DetailsFragment();
details.setArguments(getIntent().getExtras());
getSupportFragmentManager().beginTransaction().add(
android.R.id.content, details).commit();
}
}
}
Zamiast bezpośredniego wywoływania konstruktora, to chyba łatwiejsze w użyciu statycznej metody, które podłącza argumenty do fragmentu dla ciebie. Taka metoda jest często nazywana newInstance
w examples given by Google. Tam faktycznie jest newInstance
metoda DetailsFragment
, więc jestem pewien, dlaczego to nie jest używane w powyższym fragmencie ...
Tak czy inaczej, wszystkie dodatki przewidziane jako argument na tworzenie fragment, będzie dostępna przez wywołanie . Ponieważ to zwraca wartość Bundle
, jej użycie jest podobne do funkcji dodatków w postaci Activity
.
public static class DetailsFragment extends Fragment {
/**
* Create a new instance of DetailsFragment, initialized to
* show the text at 'index'.
*/
public static DetailsFragment newInstance(int index) {
DetailsFragment f = new DetailsFragment();
// Supply index input as an argument.
Bundle args = new Bundle();
args.putInt("index", index);
f.setArguments(args);
return f;
}
public int getShownIndex() {
return getArguments().getInt("index", 0);
}
// (other stuff omitted)
}
Może to być duplikat, ale wydaje się, że ludzie bardziej lubią to pytanie. Mówię tylko. – KickingLettuce