package com.boardgamegeek.ui;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBar;
import com.boardgamegeek.R;
import com.boardgamegeek.util.UIUtils;
/**
* A non-top-level DrawerActivity that supports a single pane.
*/
public abstract class SimpleSinglePaneActivity extends DrawerActivity {
private static final String TAG_SINGLE_PANE = "single_pane";
private Fragment fragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
if (savedInstanceState == null) {
createFragment();
} else {
fragment = getSupportFragmentManager().findFragmentByTag(TAG_SINGLE_PANE);
}
}
protected void createFragment() {
fragment = onCreatePane(getIntent());
if (fragment != null) {
Bundle arguments = UIUtils.intentToFragmentArguments(getIntent());
arguments = onBeforeArgumentsSet(arguments);
fragment.setArguments(arguments);
getSupportFragmentManager()
.beginTransaction()
.add(R.id.root_container, fragment, TAG_SINGLE_PANE)
.commit();
}
}
protected void recreateFragment() {
getSupportFragmentManager().beginTransaction().remove(getFragment()).commit();
createFragment();
}
/**
* Called in <code>onCreate</code> when the fragment constituting this activity is needed. The returned fragment's
* arguments will be set to the intent used to invoke this activity.
*/
protected abstract Fragment onCreatePane(Intent intent);
public Fragment getFragment() {
return fragment;
}
protected Bundle onBeforeArgumentsSet(Bundle arguments) {
return arguments;
}
}