首页 新闻 会员 周边

请问在fragment中,如何替换onCreateView所返回的那个view

0
悬赏园豆:20 [已解决问题] 解决于 2013-12-18 09:55

也就是说,我想刷新这个fragment所表现的的内容,看了下,这个表现出来的view,在onCreateView的返回中存在,那我要怎么做才能动态的替换这个view呢,请求指点

miaoboss的主页 miaoboss | 初学一级 | 园豆:4
提问于:2013-12-16 13:47
< >
分享
最佳答案
1

如果是想完全替换成一个全新的Fragment,可以:

FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(布局文件中Fragment的id, 自定义的Fragment对象);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();

这是官方文档里面渐变替换Fragment的方式。

如果仅仅想改Fragment的局部元素,可以用getFragmentManager().findFragmentById(布局文件中的Fragment的id);获取Fragment,然后用getView获取再强制转换成onCreateView方法中返回的对象。

收获园豆:20
琴剑飘零 | 菜鸟二级 |园豆:419 | 2013-12-16 23:00

请问  “然后用getView获取再强制转换成onCreateView方法中返回的对象” 之后

这个强制转换完的view,要赋值给谁呢

miaoboss | 园豆:4 (初学一级) | 2013-12-18 08:44

@miaoboss:

不需要再赋值了啊,比如说这个Fragment里面放的是一个TextView,那么要替换里面的文字,就可以:

TextView textView = (TextView)getFragmentManager().findFragmentById(xxx);

textView.setText("yyy");

这样就可以了,如果你是想连TextView都不要了,换成一个其它控件,那可以考虑用我说的第一种方法替换Fragment,或者在这个Fragment里面先放一个LinearLayout,然后再放TextView,这样获取到LinearLayout之后,先把TextView这个child删掉,再添加新的子控件。

琴剑飘零 | 园豆:419 (菜鸟二级) | 2013-12-18 09:05

@琴剑飘零: 是这样的,我在创建这个fragment的时候,在它的onCreateView中写了一个方法,,根据某个参数的情况,来创建了一个动态的view,填入这个fragment。

现在我改写成,在onCreateView中初始化一些大体的布局,而一些动态数据和子view的添加实现,放到另一个接口方法里了。这个应该就是您说的第二种方法。

应该是我没有理解好:为什么只是替换了数据,比如替换了某个子view的内容,它就会自行更新,刷新机制是如何得.....

现在也没能很好理解(感觉思路好乱)

miaoboss | 园豆:4 (初学一级) | 2013-12-18 09:29

@miaoboss: 控件内容的直接变化不同于画图,一般来说,如果是绘制图形或者滚动,需要在绘制完成后让当前布局失效(invalidate),触发重新进行布局的操作。而对于一般控件来说,用findViewById或findFragmentById就是直接拿到了界面元素的引用,在这个引用上进行修改,不需要额外的刷新语句,就可以直接更新到界面当中,需要额外刷新的我觉得很多情况下拿到的都不是直接的要更改控件的引用。不知道这么说好不好理解

琴剑飘零 | 园豆:419 (菜鸟二级) | 2013-12-18 09:51

@琴剑飘零: 多谢~思路有些清晰了。朋友方便留个联系方式么,要是今后有什么问题的话,还想继续请教您~我基础有些差,还望赐教:)

miaoboss | 园豆:4 (初学一级) | 2013-12-18 09:55

@miaoboss: 就发邮件交流吧,我的邮箱是zhfch.class@gmail.com,每天都会查邮件的~

琴剑飘零 | 园豆:419 (菜鸟二级) | 2013-12-18 10:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册