package com.meizu.smartbar;
import android.R.integer;
import android.app.ActionBar;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.app.ActionBar.Tab;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.meizu.smartbar.tab.ContactsFragment;
import com.meizu.smartbar.tab.DialerFragment;
import com.meizu.smartbar.tab.RecentFragment;
import com.meizu.smartbar.tab.ActionBarTab.MyTabListener;
public class ActionBarStyle extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final ActionBar bar = getActionBar();
// 用户自定义的View,可以像下面这样操作
bar.addTab(bar.newTab().setCustomView(R.layout.tab_widget_indicator)
.setTabListener(new MyTabListener<ContactsFragment>(this, "contacts", ContactsFragment.class)));
bar.addTab(bar.newTab().setCustomView(R.layout.tab_widget_recent)
.setTabListener(new MyTabListener<RecentFragment>(this, "recent", RecentFragment.class)));
bar.addTab(bar.newTab().setCustomView(R.layout.tab_widget_dialer)
.setTabListener(new MyTabListener<DialerFragment>(this, "dialer", DialerFragment.class)));
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// 设置ActionBar Tab显示在底栏
SmartBarUtils.setActionBarTabsShowAtBottom(bar, true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_settings, menu);
return true;
}
public static class MyTabListener<T extends Fragment> implements ActionBar.TabListener {
private final Activity mActivity;
private final String mTag;
private final Class<T> mClass;
private final Bundle mArgs;
private Fragment mFragment;
public MyTabListener(Activity activity, String tag, Class<T> clz) {
this(activity, tag, clz, null);
}
public MyTabListener(Activity activity, String tag, Class<T> clz, Bundle args) {
mActivity = activity;
mTag = tag;
mClass = clz;
mArgs = args;
// Check to see if we already have a fragment for this tab, probably
// from a previously saved state. If so, deactivate it, because our
// initial state is that a tab isn't shown.
mFragment = mActivity.getFragmentManager().findFragmentByTag(mTag);
if (mFragment != null && !mFragment.isDetached()) {
FragmentTransaction ft = mActivity.getFragmentManager().beginTransaction();
ft.detach(mFragment);
ft.commit();
}
}
public void onTabSelected(Tab tab, FragmentTransaction ft) {
if (mFragment == null) {
mFragment = Fragment.instantiate(mActivity, mClass.getName(), mArgs);
ft.add(android.R.id.content, mFragment, mTag);
} else {
ft.attach(mFragment);
}
mActivity.getActionBar().setTitle(mTag);
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
if (mFragment != null) {
ft.detach(mFragment);
}
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
Toast.makeText(mActivity, "Reselected!", Toast.LENGTH_SHORT).show();
}
}
}