Где / Как 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:

 Item = getIntent().getExtras().getString("name"); 

Как вы это делаете, используя fragmentы? Я также использую библиотеку совместимости v4.

Это происходит в FragmentActivity? Или фактический fragment? И какой метод это входит? OnCreate? onCreateView? другой?

И могу ли я увидеть пример кода, пожалуйста?

EDIT: Стоит отметить, что я пытаюсь сохранить Activity 1 как Activity (или фактически ListActivity, где я передаю намерение listitem при нажатии), а затем перейти к набору fragmentов вкладок (через Activity Fragment) и I нужно либо вкладку, чтобы иметь возможность получить дополнительные функции. (Надеюсь, это возможно?)

То, что я обычно делаю, и я считаю, что это то, что 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"); 

Это избавит вас от необходимости писать код.

  • Как правильно начать работу с PostExecute в Android?
  • Лучшая практика передачи контекста в classы без активности?
  • Как открыть новое действие, щелкнув элемент в списке?
  • Программно обновлять виджет из активности / службы / получателя
  • Одна активность и все остальные fragmentы
  • Как передать данные от 2-го действия до 1-го действия при нажатии? - Андроид
  • Использование активности камеры в Android
  • Как показать активность до того, как мое приложение будет удалено (Android)
  • Доступ к SharedPreferences с помощью статических методов
  • Начать работу внутри onReceive BroadcastReceiver
  • Как предотвратить удаление приложения?
  • Давайте будем гением компьютера.