Я нашел реализацию табов с переключением методом скрола влево-вправо. Код:
[syntax=java]public static class TabsAdapter extends FragmentPagerAdapter
implements TabHost.OnTabChangeListener, ViewPager.OnPageChangeListener {
private final Context mContext;
private final TabHost mTabHost;
private final ViewPager mViewPager;
private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
static final class TabInfo {
private final String tag;
private final Class<?> clss;
private final Bundle args;
TabInfo(String _tag, Class<?> _class, Bundle _args) {
tag = _tag;
clss = _class;
args = _args;
}
}
static class DummyTabFactory implements TabHost.TabContentFactory {
private final Context mContext;
public DummyTabFactory(Context context) {
mContext = context;
}
@Override
public View createTabContent(String tag) {
View v = new View(mContext);
v.setMinimumWidth(0);
v.setMinimumHeight(0);
return v;
}
}
public TabsAdapter(FragmentActivity activity, TabHost tabHost, ViewPager pager) {
super(activity.getSupportFragmentManager());
mContext = activity;
mTabHost = tabHost;
mViewPager = pager;
mTabHost.setOnTabChangedListener(this);
mViewPager.setAdapter(this);
mViewPager.setOnPageChangeListener(this);
}
public void addTab(TabHost.TabSpec tabSpec, Class<?> clss, Bundle args) {
tabSpec.setContent(new DummyTabFactory(mContext));
String tag = tabSpec.getTag();
TabInfo info = new TabInfo(tag, clss, args);
mTabs.add(info);
mTabHost.addTab(tabSpec);
notifyDataSetChanged();
}
@Override
public int getCount() {
return mTabs.size();
}
@Override
public Fragment getItem(int position) {
TabInfo info = mTabs.get(position);
return Fragment.instantiate(mContext, info.clss.getName(), info.args);
}
@Override
public void onTabChanged(String tabId) {
int position = mTabHost.getCurrentTab();
mViewPager.setCurrentItem(position);
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
TabWidget widget = mTabHost.getTabWidget();
int oldFocusability = widget.getDescendantFocusability();
widget.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
mTabHost.setCurrentTab(position);
widget.setDescendantFocusability(oldFocusability);
}
@Override
public void onPageScrollStateChanged(int state) {
}
}[/syntax]
Создал 3 вкладки:
[syntax=java] View view;
mTabHost = (TabHost)findViewById(android.R.id.tabhost);
mTabHost.setup();
mViewPager = (ViewPager)findViewById(R.id.pager);
mTabsAdapter = new TabsAdapter(this, mTabHost, mViewPager);
//Контакты
view = createTabView(mTabHost.getContext(), R.drawable.group);
mTabsAdapter.addTab(mTabHost.newTabSpec("Contacts").setIndicator(view), Contacts.class, null);
//Сообщения
view = createTabView(mTabHost.getContext(), R.drawable.email);
mTabsAdapter.addTab(mTabHost.newTabSpec("Message").setIndicator(view), MessagesList.class, null);
//Аккаунты
view = createTabView(mTabHost.getContext(), R.drawable.settings);
mTabsAdapter.addTab(mTabHost.newTabSpec("Accounts").setIndicator(view), ManageAccounts.class, null);
}
private static View createTabView(final Context context, final int drawable)
{
View view = LayoutInflater.from(context).inflate(R.layout.tab_view, null);
ImageView iv = (ImageView) view.findViewById(R.id.imageView1);
iv.setImageResource(drawable);
return view;
}[/syntax]
с фрагментами Contacts.class, MessagesList.class, ManageAccounts.class.
Я создал методы onPause, onStart, onStop, onResume и мониторю их в логах.
В Contacts.class реализована загрузка списка друзей из вконтакте т.е. происходит обращение к api и загрузка в ListView. Проблема в том, что при переключении вкладки на MessagesList.class присходит:
Код: Выделить всё
ManageAccounts: onStart();
ManageAccounts: onResume();Код: Выделить всё
Contacts: onPause();
Contacts: onStop();Код: Выделить всё
ManageAccounts: onPause();
ManageAccounts: onStop();
Contacts: onStart();
Contacts: onResume();
Как запретить onStop ?