- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的 Fragment 中包含 ViewPager 的选项卡(TabHost 或 TabContent)有一个奇怪的问题。
问题是,当我更改页面,然后返回到带有 tab 和 viewPager 的 fragment 时,我的内容或 View 消失了。
->
这是我的 TabFragment
代码package com.halo.mobi.fragment;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.HorizontalScrollView;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;
import android.widget.TabHost.TabContentFactory;
import android.widget.TabWidget;
import android.widget.TextView;
import com.halo.mobi.R;
public class GameTabFragment extends Fragment {
Activity myActivity;
TabWidget tab;
TabHost tabHost;
ViewPager pager;
HorizontalScrollView hsvTab;
List<String> headers;
TabPagerAdapter adapter;
TabContentFactory fac;
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
myActivity = this.getActivity();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View rootView = inflater.inflate(R.layout.game_list_tab_fragment,
container, false);
headers = new ArrayList<String>();
tabHost = (TabHost) rootView.findViewById(R.id.tabHost);
pager = (ViewPager) rootView.findViewById(R.id.pager);
hsvTab = (HorizontalScrollView) rootView.findViewById(R.id.hsvTab);
hsvTab.setHorizontalScrollBarEnabled(false);
tabHost.setup();
fac = new TabContentFactory() {
@Override
public View createTabContent(String tag) {
// TODO Auto-generated method stub
return new View(myActivity);
}
};
tabHost.addTab(tabHost.newTabSpec("cat")
.setIndicator(getTabIndicator(myActivity, "CATEGORIES"))
.setContent(fac));
tabHost.addTab(tabHost.newTabSpec("new")
.setIndicator(getTabIndicator(myActivity, "NEW RELEASE"))
.setContent(fac));
tabHost.addTab(tabHost.newTabSpec("free")
.setIndicator(getTabIndicator(myActivity, "TOP FREE"))
.setContent(fac));
tabHost.addTab(tabHost.newTabSpec("paid")
.setIndicator(getTabIndicator(myActivity, "TOP PAID"))
.setContent(fac));
tabHost.getTabWidget().setBackgroundColor(
getResources().getColor(R.color.merah));
tabHost.setOnTabChangedListener(new OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
// TODO Auto-generated method stub
pager.setCurrentItem(tabHost.getCurrentTab());
hsvTab.smoothScrollTo(
tabHost.getTabWidget()
.getChildTabViewAt(tabHost.getCurrentTab())
.getLeft(), 0);
}
});
adapter = new TabPagerAdapter(this.getFragmentManager());
pager.setAdapter(adapter);
pager.setOffscreenPageLimit(5);
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
// TODO Auto-generated method stub
tabHost.setCurrentTab(arg0);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
});
return rootView;
}
private View getTabIndicator(Context context, String title) {
View view = LayoutInflater.from(context).inflate(
R.layout.gametablayout, null);
TextView tv = (TextView) view.findViewById(R.id.txtTitle);
tv.setText(title);
tv.setSingleLine();
view.setPadding(2, 0, 2, 0);
return view;
}
private class TabPagerAdapter extends FragmentPagerAdapter {
GameCategoryFragment cat;
GameNewReleaseFragment newrelease;
GameTopFreeFragment topfree;
GameTopPaidFragment toppaid;
public TabPagerAdapter(FragmentManager fm) {
super(fm);
cat = new GameCategoryFragment();
newrelease = new GameNewReleaseFragment();
topfree = new GameTopFreeFragment();
toppaid = new GameTopPaidFragment();
// TODO Auto-generated constructor stub
}
@Override
public Fragment getItem(int pos) {
// TODO Auto-generated method stub
if (pos == 0)
return cat;
if (pos == 1)
return newrelease;
if (pos == 2)
return topfree;
if (pos == 3)
return toppaid;
return cat;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 4;
}
}
}
game_list_tab_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="top|left"
android:orientation="vertical" >
<TabHost
android:id="@+id/tabHost"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<HorizontalScrollView
android:id="@+id/hsvTab"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/merah" >
<TabWidget
android:id="@android:id/tabs"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</TabWidget>
</HorizontalScrollView>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="0px"
android:orientation="vertical" >
</FrameLayout>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</TabHost>
</LinearLayout>
</FrameLayout>
这里是 MainActivity.java:
package com.halo.mobi.activity;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBar.LayoutParams;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import com.halo.mobi.R;
import com.halo.mobi.fragment.GameDetailFragment;
import com.halo.mobi.fragment.GameTabFragment;
import com.halo.mobi.fragment.HomeFragment;
import com.halo.mobi.fragment.NavigationDrawerFragment;
public class MainActivity extends ActionBarActivity implements
NavigationDrawerFragment.NavigationDrawerCallbacks {
/**
* Fragment managing the behaviors, interactions and presentation of the
* navigation drawer.
*/
private NavigationDrawerFragment mNavigationDrawerFragment;
private DrawerLayout drawerLayout;
/**
* Used to store the last screen title. For use in
* {@link #restoreActionBar()}.
*/
private int pos;
FragmentManager fragmentManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
restoreActionBar();
mNavigationDrawerFragment = (NavigationDrawerFragment) getSupportFragmentManager()
.findFragmentById(R.id.navigation_drawer);
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
// Set up the drawer.
mNavigationDrawerFragment.setUp(R.id.navigation_drawer, drawerLayout);
}
@Override
public void onNavigationDrawerItemSelected(int position) {
// update the main content by replacing fragments
fragmentManager = getSupportFragmentManager();
switch (position) {
case 0:
fragmentManager.beginTransaction()
.replace(R.id.container, new HomeFragment())
.addToBackStack("TAG_FRAGMENT").commit();
break;
case 1:
fragmentManager.beginTransaction()
.replace(R.id.container, new GameTabFragment())
.addToBackStack("TAG_FRAGMENT").commit();
break;
default:
fragmentManager.beginTransaction()
.replace(R.id.container, new HomeFragment())
.addToBackStack("TAG_FRAGMENT").commit();
break;
}
}
public void onSectionAttached(int number, int gameId) {
pos = number;
if (gameId != 0) {
fragmentManager = getSupportFragmentManager();
fragmentManager
.beginTransaction()
.replace(R.id.container,
GameDetailFragment.newInstance(number, gameId))
// .addToBackStack("TAG_FRAGMENT")
.commit();
}
}
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
if (pos == 0) {
finish();
} else {
onNavigationDrawerItemSelected(pos);
}
}
public void restoreActionBar() {
ActionBar mActionBar = getSupportActionBar();
mActionBar.setDisplayShowHomeEnabled(false);
mActionBar.setDisplayShowTitleEnabled(false);
LayoutInflater mInflater = LayoutInflater.from(this);
View mCustomView = mInflater.inflate(R.layout.custom_actionbar, null);
ImageView imageButton = (ImageView) mCustomView
.findViewById(R.id.btnMenu);
imageButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
mNavigationDrawerFragment.openDrawer();
}
});
mActionBar.setCustomView(mCustomView, new LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
mActionBar.setDisplayShowCustomEnabled(true);
}
}
任何帮助将不胜感激。
最佳答案
我遇到了同样的问题。在您的 TabFragment 类 (GameTabFragment) 中,将 getFragmentManager 替换为 getChildFragmentManager。
代替: adapter = new TabPagerAdapter(this.getFragmentManager());
使用这个:adapter = new TabPagerAdapter(this.getChildFragmentManager());
这应该可以解决它。
关于android - 更改页面后选项卡内容消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27142850/
我使用 vanilla JS 通过 AJAX 向数据库发送请求。数据写入数据库没有问题。在刷新页面之前,我看不到被放入数据库中的内容。当我删除内容时也会发生同样的情况,我必须刷新才能看到内容消失了。
抱歉,这篇文章很长,我试图提供所有信息并解释我已经尝试过的内容。 问题: 我将经典的 Phoenix View 放入实时 View 中。虽然一切看起来都很好,但 echart 一完成绘制就消失了。好像
搜索了一下,没有找到我要找的东西。我有两个按钮,单击一次即可拉出两个不同的选择框,第二次单击它们就会消失。但是,我希望选择框 1 在单击按钮 2 时消失,反之亦然:选择框 2 将在单击按钮 1 时消失
我正在尝试使用自动布局使用“浮动”标题构建滚动视图。更确切地说,我正在尝试建立包含几列的日历视图。这些列中的每个列都应具有自己的标题,该标题应浮动在顶部,而该列可以垂直滚动到其下方。 如果一切正常,则
我正在尝试模仿星星背景。 星星是在加载时创建并随机散布在整个网站上的。到目前为止我已经调整了一些代码。 var star="•"; var numStars=100; for(var x=1;x•";
我查遍了整个网络,但找不到解决方案。我对 jQuery 也很陌生。 我的案例: 我有一个导航栏,其中的每个链接都会激活/触发一个megamenu(每个链接都有自己的megamenu)。 我需要什么:
我有一个可扩展的 ListView ,当我点击一行时,它会触发 onChildClick 或 onGroupClick,具体取决于我点击的是子项还是组。 如果我在 xml 布局文件中添加可点击的内容(
在我的程序中,我有一个 NSMutableData 变量,用于收集来自 http://www.nhara.org/scored_races-2013.htm 的信息。 .大约第三次从网站获取信息后,当
我一直在完美地使用 Genymotion,但是从最近几天开始我的 Genymotion 并打开它的 GPS 开始,我的 Genymotion 突然消失了。但是我的 eclipse 显示 Genymot
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and t
所以我的 Item::return_all() 有问题,因为我在 main.cpp 中调用它。早些时候我在 read_file() 和 for (auto data : example_item) 中
所有 UITableCells 在 UITableView 中滚动和触摸时消失。一切都以编程方式完成,我使用标准的 UITableViewCell 类。 我在某处读到包含我的单元格数据的数组可能被清空
我对 Swift 还很陌生。我的问题是我的 UICollectionView 正在消失。在 Xcode 中,它显示一切就绪,但当我在模拟器或设备上启动时,它消失了,只剩下导航栏和标签栏。 有谁知道是什
这是 this one的续题。较早的问题是在复选框上。但是后来我根据要求把check box改成了radio buttons。 现在我需要显示子单选按钮并在母单选按钮处于事件状态时更改背景颜色。一旦它
我用 JS 写了一个简单的脚本。当我将它放入 html 文档(在 body 标签的底部)时,它工作正常。当我尝试将它放入外部文档并链接它时,脚本运行但 canvas 元素消失(刚刚检查:当我将脚本放在
我正在尝试创建一个带有固定元素的滚动页面,当用户向下滚动页面时,该元素“始终”可见。例如,带有道路背景的汽车图像。因此,当用户向下滚动页面时,汽车看起来就像在路上行驶。虽然汽车出现在道路的顶部,但它必
这个问题在这里已经有了答案: How can I change CSS display none or block property using jQuery? (15 个答案) 关闭 4 年前。
我在市场上有一个支持小部件的应用程序。我对应用程序进行了一些重大更改,重新设计了很多内部结构,替换/重命名 Activity 等。其他更改包括从不同的共享首选项键获取小部件配置数据,尽管我已经编写了转
我有一个 fragment alertsfragment.java,它有一个 GridView 布局,当我打开它时,它工作正常,但是当我在其他选项卡之间滑动时,它就消失了。为了解释更多,我有一个 Ac
我是一名优秀的程序员,十分优秀!