gpt4 book ai didi

java - TabHost 显示一次内容 (onCreate)

转载 作者:搜寻专家 更新时间:2023-10-30 21:28:14 25 4
gpt4 key购买 nike

我在 navigationDrawer 中有一个 TabHost 我正面临这个奇怪的问题一个抽屉导航项目到另一个抽屉导航项目并返回 TabHost 它不会显示其内容,第一次它完美地工作但是当我改变项目并返回它时,它赢了'显示内容;换句话说,它不会加载子 fragment ,除非我关闭应用程序并重新启动它或更改方向(重新创建 fragment )。

我第一次打开它时的样子(有内容)

enter image description here

在转到另一个 navDrawer Item 并返回到 TabHost 之后

enter image description here

TabHost fragment :

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TabHost;
import android.widget.TabWidget;

import java.util.ArrayList;

import info.fds.Emirates.R;

public class MyFragment extends Fragment
{

private TabHost mTabHost;
private ViewPager mViewPager;
private TabsAdapter mTabsAdapter;

public MyFragment() {
}

@Override
public void onCreate(Bundle instance)
{
super.onCreate(instance);

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_main, container, false);

mTabHost = (TabHost) v.findViewById(android.R.id.tabhost);
mTabHost.setup();

mViewPager = (ViewPager) v.findViewById(R.id.pager);
mTabsAdapter = new TabsAdapter(getActivity(), mTabHost, mViewPager);



return v;
}

@Override
public void onResume() {
super.onResume();
// Here we load the content for each tab.
mTabsAdapter.addTab(mTabHost.newTabSpec("Incident").setIndicator("Incident"), PageOneFragment.class, null);
mTabsAdapter.addTab(mTabHost.newTabSpec("Service Request").setIndicator("Service Request"), PageTwoFragment.class, null);
}

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;
}

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);

}

public void onTabChanged(String tabId)
{
int position = mTabHost.getCurrentTab();
mViewPager.setCurrentItem(position);
}

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
{
}

public void onPageSelected(int position)
{
// Unfortunately when TabHost changes the current tab, it kindly
// also takes care of putting focus on it when not in touch mode.
// The jerk.
// This hack tries to prevent this from pulling focus out of our
// ViewPager.
TabWidget widget = mTabHost.getTabWidget();
int oldFocusability = widget.getDescendantFocusability();
widget.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
mTabHost.setCurrentTab(position);
widget.setDescendantFocusability(oldFocusability);
}

public void onPageScrollStateChanged(int state)
{
}
}
}

PageOneFragment:

public class PageOneFragment extends Fragment
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
return inflater.inflate(R.layout.pageone_fragment, container, false);
}

@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
}

@Override
public void onAttach(Activity activity)
{
super.onAttach(activity);
}

@Override
public void onStart()
{
super.onStart();
}

@Override
public void onResume()
{
super.onResume();
}
}

PageTwoFragment

public class PageTwoFragment extends Fragment
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
return inflater.inflate(R.layout.pagetwo_fragment, container, false);
}

@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
}

@Override
public void onAttach(Activity activity)
{
super.onAttach(activity);
}

@Override
public void onStart()
{
super.onStart();
}

@Override
public void onResume()
{
super.onResume();
}
}

注意:调试后,我注意到 PageOneFragmentPageTwoFragment 中的 onCreateView() 没有执行。

那么发生了什么,为什么 tabHost 在导航到另一个项目后没有加载它的内容?

编辑:经过几个小时的痛苦调试,我发现我的代码在第二次调用时从未执行过休假方法:

@Override
public Fragment getItem(int position)//never get executed after the second call
{
TabInfo info = mTabs.get(position);

return Fragment.instantiate(mContext, info.clss.getName(), info.args);

}

我该如何解决这个问题?

非常感谢任何帮助。

提前致谢。

最佳答案

这个荒谬的错误让我浪费了很多时间,而解决方案实际上很简单,问题是我在替换后使用 FragmentPagerAdapter 而不是 FragmentStatePagerAdapter ,一切正常,希望这能帮助其他有类似问题的人。

关于java - TabHost 显示一次内容 (onCreate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30912930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com