EDIT:
Итак, после комментариев ниже я пересмотрел и понял, что меня подвешивает.
Представьте себе, список моих клиентов и сведения о клиентах можно начать с:
public class ClientsMainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//StudioTabOpenHelper db;
setContentView(R.layout.main_client_activity);
}
}
Итак, это отлично работает, запускает мою main_client_Activity (определенную в макете ниже, и я вызываю это действие при нажатии кнопки на моем основном экране):
Intent intent = new Intent(getActivity(), ClientsMainActivity.class);
startActivity(intent);
Легко проблема в том, что ClientsMainActivity
не вызывает OnCreateView или что-то еще, а просто устанавливает макет на макет, который определяет мой фрагмент и мой ListFragment. Это нормально, потому что я не пытаюсь передать что-либо в ClientsMainActivity
, но если у меня есть гипотетическая активность вроде:
SessionMainsActivity
, которая вызывается, когда они нажимают на редактирование сеанса клиента , то я бы не стал называть SessionsMainActivity
таким же образом (запускает действие, которое просто устанавливается на alayout), я бы хотел, чтобы этот макет был установлен, поскольку он определяет, как мои фрагменты разделяются. Но я также хотел бы передать данные в это, а затем в последующие фрагменты (например, какой сеанс они щелкнули для редактирования / удаления.
Так что мне интересно, имеет ли смысл вышесказанное, я уверен, что это простая вещь Я просто не могу осмыслить. У меня нет проблем с вызовом FragmentActivitie
s из других фрагментов, они занимают весь экран, но работает. Так что, я думаю, большая проблема в том, что ClientsMainActivity
взят из некоторого примера, который я нашел в Интернете для создания рецептов, которые показывают вам, как сделать несколько фрагментов на экране. Вещь, которая дает мне все, что делает FragmentActivity
, устанавливает представление содержимого в макет, похоже, работает, поэтому я не могу понять, как бы я закодировал его, чтобы сделать то же самое, но позвольте мне передать значения фрагментам, которые определяет макет и т. д.
END EDIT
Итак, я использую это здесь:
http://developer.android.com/guide/topics/fundamentals/fragments. html
Он проделал мне долгий путь, и, используя то, что они говорят, для основного действия и fragment_layout.xml, я получил хороший список клиентов слева (это фрагмент списка) и фрагмент деталей справа .
Затем я добавил возможность редактировать информацию о сеансе на клиенте (или редактировать детали клиента), оба из которых были полноэкранными фрагментами. Это отлично сработало.
Теперь я решил, что мой пользовательский интерфейс редактирования сеанса будет лучше всего обслуживать разделение информации на две панели снова.
Это не работает, как я думал, как я уже сказал, у меня есть main_Activity, который делает это в onCreate:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_client_activity);
}
, где main_client_activity.xml
определен в двух макетах, кроме одного для альбомных планшетов. здесь:
Это все отлично работает! В этом случае я обрабатывал все остальное как полноэкранное действие, которое запускало свой собственный фрагмент:
EditSessionActivity
EditClientActiivyt
, оба из которых используют getSupportFragmentManager (). BeginTransaction, и я мог передавать ему информацию из вызова .newInstance .
У меня был макет session_edit.xml
, определенный с кнопками, текстовыми представлениями и т. Д., И он отлично работал. Это то, что я загрузил в свой SessionEdit
фрагмент, "запущенный" моим EditSessionActivity
. Но теперь, когда я хочу разделить его на части, я столкнулся с загвоздкой. Выше я определил client_list и идентификатор client_details, есть ли эти заполнители на моем экране? мне ссылаться на них, когда я хочу заменить то, что там, на совершенно другие фрагменты?
или я создаю другой макет фрагмента, называемый чем-то вроде fragment_session_layout, который определяет что-то вроде:
Извините, не знаю, как назвать это в конце мой язык того, что я прошу, в основном, как дважды получить две панели фрагментов. В онлайн-демонстрации показано, как это сделать (и простой ListFragment).
Я выполнил все вышеперечисленное и просто не могу понять, как передать во фрагмент нужные мне данные, я использовал это в моем EditSessionActivity :
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int clientID = getIntent().getIntExtra(THE_SELECTED_CLIENT, -1);
int sessionID = getIntent().getIntExtra(SELECTED_SESSION,-1);
SessionEdit edits = SessionEdit.newInstance(this.getBaseContext(), false, clientID, sessionID);
mUIListener = (OnUpdateUI)edits;
getSupportFragmentManager().beginTransaction().add(android.R.id.content, edits).commit();
}
это сработало, но, чтобы попытаться придерживаться предыдущего примера фрагмента, я предположил, что мой EditSessionActivit
был вроде как создание другого MainActivity
(потому что в нем есть две панели вроде основной). поэтому я перекодировал onCreate
в EditSessionActivity
следующим образом:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edit_session_fullview);
}
Который после борьбы в моем фрагменте EditSession, имеющем отношение к onCreateView, я получил это, чтобы наконец заработать, но не смог передать data потому что нет экземпляра объекта, используя как предыдущий onCreate
, который имел edits = SessionEdit.newInstance (...)
Так что это хорошая практика - делать другой фрагмент макет, в котором есть две проблемы, и запуск его, когда запускается правильное действие. Или нужно заменить два уже созданных фрагмента ?? из моего main_client_activity.xml
каким-то образом?