Где / Как getIntent (). GetExtras () в Android Fragment?
С деятельностью я обычно делал это:
В действии 1:
Intent i = new Intent(getApplicationContext(), MyFragmentActivity.class); i.putExtra("name", items.get(arg2)); i.putExtra("category", Category); startActivity(i);
В действии 2:
- Изменение ориентации на Android вызывает onCreate
- Новый Intent () запускает новый экземпляр с Android: launchMode = "singleTop"
- Запуск Skype из программы Programmatically & Pass Number - Android
- Уведомление: активность уже открыта
- Заставка экрана при загрузке URL-адреса в веб-виде в приложении для Android
Item = getIntent().getExtras().getString("name");
Как вы это делаете, используя fragmentы? Я также использую библиотеку совместимости v4.
Это происходит в FragmentActivity? Или фактический fragment? И какой метод это входит? OnCreate? onCreateView? другой?
И могу ли я увидеть пример кода, пожалуйста?
EDIT: Стоит отметить, что я пытаюсь сохранить Activity 1 как Activity (или фактически ListActivity, где я передаю намерение listitem при нажатии), а затем перейти к набору fragmentов вкладок (через Activity Fragment) и I нужно либо вкладку, чтобы иметь возможность получить дополнительные функции. (Надеюсь, это возможно?)
- Как передать переменную от Activity to Fragment и передать ее обратно?
- Как уведомить о намерениях уведомления, а не делать новые намерения?
- Передача объектов из объектов между действиями
- Связь между деятельностью и службой
- ViewPager wrap_content не работает
- Как вы используете Intent.FLAG_ACTIVITY_CLEAR_TOP, чтобы очистить стек активности?
- Ошибки, управляющие жизненным циклом UnityPlayer в приложении для собственных приложений Android
- Попытка UNINSTALL_SHORTCUT, но ярлык не исчезнет
То, что я обычно делаю, и я считаю, что это то, что Google предназначалось для разработчиков, тоже состоит в том, чтобы по-прежнему получать дополнительные функции от Intent
в Activity
а затем передавать любые дополнительные данные в fragmentы, создавая их с помощью аргументов.
В блоге Android dev есть пример , иллюстрирующий эту концепцию, и вы увидите это в нескольких демонстрационных примерах API. Хотя этот конкретный пример приведен для fragmentов API 3.0+, тот же stream применяется при использовании FragmentActivity
и Fragment
из библиотеки поддержки.
Сначала вы извлекаете намерения, как обычно, в свою деятельность и передаете их в качестве аргументов fragmentу:
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(); } } }
Вместо прямого вызова конструктора, вероятно, проще использовать статический метод, который вставляет аргументы в fragment для вас. Такой метод часто называют newInstance
в примерах, данных Google . Фактически есть метод newInstance
в DetailsFragment
, поэтому я не уверен, почему он не используется в fragmentе выше …
В любом случае все дополнительные функции, предоставленные в качестве аргумента при создании fragmentа, будут доступны, вызвав getArguments()
. Поскольку это возвращает Bundle
, его использование аналогично использованию дополнительных функций в 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) }
вы все равно можете использовать
String Item = getIntent().getExtras().getString("name");
в fragment
вам просто нужно getActivity()
вызвать getActivity()
:
String Item = getActivity().getIntent().getExtras().getString("name");
Это избавит вас от необходимости писать код.