У меня есть макет на основе фрагментов с двумя ListFragments (A и B), оба из которых содержатся в действии (называемом ListingActivity 1). Когда приложение запускается, вызывается ListingActivity 1, и в зависимости от того, находится ли устройство в книжной или альбомной ориентации, отображается либо только ListFragment A, либо оба ListFragment.
Когда вы щелкаете элемент в ListView фрагмента A, затем отображается ListView фрагмента B. Когда вы щелкаете элемент в ListView фрагмента B, он переходит к новому действию (действие 1).
Я использую этот код (называемый ListingActivity 2), чтобы определить, показывать ли ListFragment B отдельно или вместе с ListFragment A:
public class ListingActivity extends SherlockFragmentActivity
{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
// If the screen is now in landscape mode, we can show the
// dialog in-line so we don't need this activity.
finish();
return;
}
if (savedInstanceState == null) {
// During initial setup, plug in the details fragment.
final ListingFragment details = new ListingFragment();
details.setArguments(getIntent().getExtras());
getSupportFragmentManager().beginTransaction().add(android.R.id.content, details).commit();
}
}
}
В Упражнении 1 я использую setDisplayHomeAsUpEnabled, чтобы включить логотип панели действий в качестве кнопки «Назад», но я не уверен, как справиться с намерением «домой». Когда устройство находится в портретном режиме, пользователь должен вернуться к ListingActivity 2, но если он находится в ландшафтном режиме, он должен вернуться к ListingActivity 1.
Я собирался сделать что-то вроде этого, но это кажется очень хакерским:
@Override
public boolean onOptionsItemSelected(final MenuItem item)
{
if (item.getItemId() == android.R.id.home)
{
final Intent intent;
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
intent = new Intent(this, ListingActivity1.class);
else
intent = new Intent(this, ListingActivity2.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
return true;
} else {
return super.onOptionsItemSelected(item);
}
}