ViewPager的fragment加viewpager中嵌套的fragment加viewpager怎么实现刷新数据

ViewPager的Fragment中嵌套的Fragment怎么实现刷新数据?_问答_ThinkSAAS
ViewPager的Fragment中嵌套的Fragment怎么实现刷新数据?
ViewPager的Fragment中嵌套的Fragment怎么实现刷新数据?
我在ViewPager的Fragment中又嵌套了两个Fragment。希望实现按下对应按钮显示其中一个Fragment,隐藏另一个Fragment的功能。
现在这个功能实现了,但是问题来了,当我想刷新这两个Fragment里数据时,出现了奇怪的现象。当我刷新完后,按下按钮想要隐藏当前Fragment ,显示另一个Fragment时,在那个Fragment里把两个FragMent的UI都显示了出来,我的hide功能被屏蔽了。怎么解决这个问题呢?
下面是我的代码
嵌套的Fragment的代码,两个Fragment代码类似,在管理他们的那个Fragment里面使用setUI()刷新
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.bottom_fragment_one, container, false);
tmpD= (TextView) view.findViewById(R.id.tmp_d);
tmpN = (TextView) view.findViewById(R.id.tmp_n);
imageD= (SimpleDraweeView) view.findViewById(R.id.image_d);
imageN= (SimpleDraweeView) view.findViewById(R.id.image_n);
//用来设置UI,更新UI时重新从数据库获取数据,进行设置
public void setUI(){
Forecast forecast = mFrecastDao.getForecastByCity(mCity);
tmpD.setText(forecast.getDaily_1_max());
tmpN.setText(forecast.getDaily_1_min());
imageD.setImageURI(getImageUri(forecast.getDaily_1_code_d()));
imageN.setImageURI(getImageUri(forecast.getDaily_1_code_n()));
两个按钮实现隐藏其中一个Fragment,显示另一个的功能
public void onClick(View v) {
FragmentManager fm = getChildFragmentManager();
// 开启Fragment事务
FragmentTransaction transaction = fm.beginTransaction();
switch (v.getId())
case R.id.button_left:
transaction.hide(mBottomTwo);
transaction.show(mBottomOne);
case R.id.button_right:
transaction.hide(mBottomOne);
transaction.show(mBottomTwo);
// 事务提交
同时调用两个Fragment的刷新代码进行刷新
public void UpdateUI(){
mBottomOne.setUI();
mBottomTwo.setUI();
我按照你的流程写了一个demo,复现了你描述的bug现象,
建议你在合适的地方打印子Fragment的数量,比如在UpdateUI()或者onClick():
Log.d(TAG,"child fragment count:"+ getChildFragmentManager().getFragments().size());
不清楚你在父fragment何处调用ft.add()来添加子fragment,我是在onCreateView.
当滑动ViewPager时,导致父fragment视图被销毁,即onDestroyView()被调到,
再次滑动到该父fragment时,重建视图,即onCreateView()被调到,ft.add()被再次调到,再次添加2个子fragment,这就导致了你提到的问题,而并非是ft.hide()不起作用。
你可以加更多的打印信息观察这些方法被调用的情况,尤其要打印你调用的add.
一个变通的方法可以解决这个问题,在commit之前先remove所有的子Fragment:
// workaround: remove child fragment to avoid child fragment added again.
if (fm.getFragments() != null && fm.getFragments().size() & 0) {
Log.d(TAG,"remove all child fragment");
for (Fragment childFragment : fm.getFragments()) {
ft.remove(childFragment);
// then, ft.add();
// lastly, ft.commit();
添加你想要问的问题
PHP开发框架
开发工具/编程工具
服务器环境
ThinkSAAS商业授权:
ThinkSAAS为用户提供有偿个性定制开发服务
ThinkSAAS将为商业授权用户提供二次开发指导和技术支持
官方1群:【已满】
让ThinkSAAS更好,把建议拿来。
关注微信,更好学习后使用快捷导航没有帐号?
FragmentPagerAdapter.notifyDataSetChanged刷新fragment无效果
zgf1991 2298 9
使用viewpager和fragment 做的tab菜单。
其中有个界面是账户界面, 未登陆的情况下,显示登陆界面,登陆成功则显示 个人信息界面。
请问下该怎么实现。
&&new一个个人信息fragment替换掉fragmentList中的登陆fragment,调用FragmentPagerAdapter.notifyDataSetChanged
是否可以在当前fragment重新导入布局文件。
加入viewpager的fragment都是new的对象,没有layout中的id,如何replace
& &我来回答& &
的 ,&&效果 ,&&个人信息&&
post_newreply
//$(\'note_\').focus();
function succeedhandle_vfastpost(url, message, param) {
$(\'vmessage\').value = \'\';
succeedhandle_fastpost(url, message, param);
showCreditPrompt();
var vf_tips = \'#在这里快速回复#\';
$(\'vmessage\').value = vf_
$(\'vmessage\').style.color = \'#CDCDCD\';
$(\'vmessage\').onclick = function() {
if($(\'vmessage\').value==vf_tips) {
$(\'vmessage\').value=\'\';
$(\'vmessage\').style.color=\&#000\&;
$(\'vmessage\').onblur = function() {
if(!$(\'vmessage\').value) {
$(\'vmessage\').value=vf_
$(\'vmessage\').style.color=\&#CDCDCD\&;
$(\'vreplysubmit\').onclick = function() {
if($(\'vmessage\').value == vf_tips) {
等级:ADD.高中
木有人回复呢,&&
&&打算就使用一个fragment, 在引用的layout中把未登录和登陆成功 的布局都写好,通过visible和gone来弄了
等级:ADD.小学
可以布局里面先写好fragment标签 设个ID 后面登陆成功replace
&fragment&calss:...
id:..&/fragment&
等级:ADD.高中
cj6585256 发表于
15:30& && &
可以布局里面先写好fragment标签 设个ID 后面登陆成功replace
不懂..没用过这样设置id...
等级:ADD.小学
& && &&&android:id=&@+id/xxxx&
& && &&&android:layout_width=&fill_parent&
& && &&&android:layout_height=&fill_parent&
& && &&&class=&cn.xxxxxxxxxxxxxxxxxxxxx&
& && &&&android:tag=&xxxxx& /& 类型这种 写在布局里,Activity oncreate就加载了fragment(即登录页) 成功后replace即可
等级:ADD.高中
cj6585256 发表于
15:47& && &
类型这种 写在布局里,Activity oncreate就加载了fragment(即登录 ...& &
我都是new对象加入到viewpager中的。。
&&不是这么写,,,
我以为你说的是在value中写什么ids,之类
等级:ADD.高中
futurexiong 发表于
12:43& && &
getItemPosition里面对应的fragment返回POSITION_NONE吧& &
没用,测试过...
等级:ADD.幼儿园
iioyouiuouiouoio
等级:ADD.幼儿园
请问lz解决了么,我也遇到同样 的问题
等级:ADD.高中
longhuang 发表于
请问lz解决了么,我也遇到同样 的问题& &
登陆未登陆写一个layout里面吧,visible gone
1、2、3、4、5、6、7、8、9、10、FragmentTabHost+Fragment+ViewPager实现内外层嵌套?
用如题的方法实现底部和顶部导航的方法,有没有大神给出代码?可参考如下代码
已有帐号?
无法登录?
社交帐号登录Android UI(15)
在ViewPager中嵌套使用Fragment,他会预加载第二页的数据,但是滑动到第三页的Fragment,前面的Fragment的数据又被清空了,又要重新加载数据,下面提供两个解决办法:
第一种解决方案:
继承FragmentPagerAdapter 重写@Override
&&&&&&&public&void&destroyItem&(View
container,&int&position, Object
&&&&&&&&&&&&
将当中的super(XXX)去掉
第二种解决方案:
继承PagerAdapter,重写destroyItem()和instantiateItem()方法&span style=&font-size:14&&public class MainPagerAdapter extends PagerAdapter {
private List&Fragment&
private FragmentM
public MainPagerAdapter(List&Fragment& fragments, FragmentManager manager) {
this.fragments =
this.manager =
public int getCount() {
return fragments.size();
public boolean isViewFromObject(View view, Object object) {
return view ==
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(fragments.get(position).getView());
public Object instantiateItem(ViewGroup container, int position) {
Fragment fragment = fragments.get(position);
if (!fragment.isAdded()) {
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(fragment, fragment.getClass().getSimpleName());
mitAllowingStateLoss();
manager.executePendingTransactions();
if (fragment.getView().getParent() == null) {
container.addView(fragment.getView());
return fragment.getView();
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:31338次
积分:1115
积分:1115
排名:千里之外
原创:80篇
评论:32条
(1)(3)(2)(4)(9)(9)(58)ViewPager的Fragment中嵌套的Fragment怎么实现刷新数据_百度知道
ViewPager的Fragment中嵌套的Fragment怎么实现刷新数据
必须通过FragmentManager的对象获得一个FragmentTransaction对象。 3。在Activity运行期间可以添加Fragment而不是在XML布局文件中进行定义.Fr期方法依赖于Activity的生命周期1。如果要执行添加.0引入的新控件。应该使用他们所存在的Activity作为沟通的纽带.Fragment是android3,例如一个Activity的onPause()的生命周期方法被调用的时候这个Activity中的所有的Fragment的onPause()方法也将被调用、删除。 2。 5.两个单独的Fragment之间是不应该进行通信的.0以下、1.6及以上的版本。 4、修改的操作、替换的操作,通过它的API来执行这些操作,需要引入v4包、删除.Fragment支持在不同的Activity中使用并且可以处理自己的输入事件以及生命周期方法等.FragmentManager提供了对Activity运行时的Fragment的添加。如果打算在Activity中改变Fragment的生命过程,果应用使用在3
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 viewpager放fragment 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信