/*
* Copyright 2013 wada811<at.wada811@gmail.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package at.wada811.android.library.demos.app;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBar.Tab;
import android.support.v7.app.ActionBar.TabListener;
import android.support.v7.app.ActionBarActivity;
import at.wada811.android.library.demos.R;
import at.wada811.android.library.demos.app.TabFragment.TabFragmentCallback;
import at.wada811.android.library.demos.app.TabFragment.TabFragmentCallbackProvider;
import at.wada811.utils.LogUtils;
public class TabActionBarActivity extends ActionBarActivity implements TabFragmentCallbackProvider {
private ActionBar mActionBar;
private static final String SELECTED_TAB_POSITION = "SelectedTabPosition";
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_actionbar_tab);
mActionBar = getSupportActionBar();
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
addTab("TAB 0");
addTab("TAB 1");
addTab("TAB 2");
}
@Override
protected void onSaveInstanceState(Bundle outState){
Tab selectedTab = mActionBar.getSelectedTab();
int position = selectedTab.getPosition();
outState.putInt(SELECTED_TAB_POSITION, position);
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState){
super.onRestoreInstanceState(savedInstanceState);
int position = savedInstanceState.getInt(SELECTED_TAB_POSITION);
LogUtils.i(String.valueOf(position));
mActionBar.selectTab(mActionBar.getTabAt(position));
}
private void addTab(String tag){
Tab tab = mActionBar.newTab();
tab.setTag(tag);
tab.setText(tag);
tab.setTabListener(new TabFragmentListener<TabFragment>(this, tag, TabFragment.class));
mActionBar.addTab(tab);
}
public class TabFragmentListener<T extends Fragment> implements TabListener {
private Fragment fragment;
private final Activity activity;
private final String tag;
private final Class<T> clazz;
public TabFragmentListener(Activity activity, String tag, Class<T> clazz) {
this.activity = activity;
this.tag = tag;
this.clazz = clazz;
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction fragmentTransaction){
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction fragmentTransaction){
if(fragment == null){
fragment = Fragment.instantiate(activity, clazz.getName());
fragmentTransaction.replace(android.R.id.content, fragment, tag);
}else{
fragmentTransaction.attach(fragment);
}
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction fragmentTransaction){
if(fragment != null){
fragmentTransaction.detach(fragment);
}
}
}
@Override
public TabFragmentCallback getTabCallback(){
return new TabFragmentCallback(){
@Override
public void onAttach(TabFragment tabFragment){
LogUtils.d(tabFragment.getTag());
}
@Override
public void onDetach(TabFragment tabFragment){
LogUtils.v(tabFragment.getTag());
}
};
}
}