如何在activity里面刷新fragmentactivity中的view-CSDN论坛

33818人阅读
android(63)
首先,如果你想在android3.0及以下版本使用fragment,你必须引用android-support-v4.jar这个包
然后你写的activity不能再继承自Activity类了,而是要继承android.support.v4.app.FragmentActivity,一些其他的父类也有相应的变化.
由于在android的实现机制中fragment和activity会被分别实例化为两个不相干的对象,他们之间的联系由activity的一个成员对象fragmentmanager来维护.fragment实例化后会到activity中的fragmentmanager去注册一下,这个动作封装在fragment对象的onAttach中,所以你可以在fragment中声明一些回调接口,当fragment调用onAttach时,将这些回调接口实例化,这样fragment就能调用各个activity的成员函数了,当然activity必须implements这些接口,否则会包classcasterror
fragment和activity的回调机制又是OOP的一次完美演绎!
下面通过一个例子来说明:
我把Activity的UI分为两个部分,左边和右边,左边用来放置点击的按钮(LeftFragment),右边用来放置对应点击后显示的信息(RightFragment).
Activity的布局layout文件:main.xml
&version=&1.0&encoding=&utf-8&&&&xmlns:android=&/apk/res/android&&&&&&&android:layout_width=&fill_parent&&&&&&&android:layout_height=&fill_parent&&&&&&&android:orientation=&horizontal&&&&&&&&&&&&&&&&&&&&&&&android:id=&@+id/left_layout&&&&&&&&&&&android:layout_width=&wrap_content&&&&&&&&&&&android:layout_height=&fill_parent&&&&&&&&&&&android:layout_weight=&1&&&&&&&&&&&android:orientation=&vertical&&&&&&&&&&&&&&&&&&&&&&&&&&&&&android:id=&@+id/right_layout&&&&&&&&&&&android:layout_width=&wrap_content&&&&&&&&&&&android:layout_height=&fill_parent&&&&&&&&&&&android:layout_weight=&10&&&&&&&&&&&android:orientation=&vertical&&&&&&&&&&&&&&&&&
LeftFragment的布局layout:leftfragment.xml
&version=&1.0&encoding=&utf-8&&&&xmlns:android=&/apk/res/android&&&&&&&android:layout_width=&match_parent&&&&&&&android:layout_height=&match_parent&&&&&&&android:orientation=&vertical&&&&&&&&&&&&&&&&&&&&&&&android:id=&@+id/first_button&&&&&&&&&&&android:layout_width=&fill_parent&&&&&&&&&&&android:layout_height=&wrap_content&&&&&&&&&&&android:text=&@string/first_button&&&&&&&&&&&&&&&&&&&&&&&android:id=&@+id/second_button&&&&&&&&&&&android:layout_width=&fill_parent&&&&&&&&&&&android:layout_height=&wrap_content&&&&&&&&&&&android:text=&@string/second_button&&&&&&&&&&&&&&&&&&&&&&&android:id=&@+id/third_button&&&&&&&&&&&android:layout_width=&fill_parent&&&&&&&&&&&android:layout_height=&wrap_content&&&&&&&&&&&android:text=&@string/third_button&&&&&&&&&&&
RightFragment的布局layout:rightfragment.xml
&version=&1.0&encoding=&utf-8&&&&xmlns:android=&/apk/res/android&&&&&&&android:layout_width=&match_parent&&&&&&&android:layout_height=&match_parent&&&&&&&android:orientation=&vertical&&&&&&&&&&&&&&&&&&&&&&&android:id=&@+id/right_show_message&&&&&&&&&&&android:layout_width=&fill_parent&&&&&&&&&&&android:layout_height=&fill_parent&&&&&&&&&&&android:background=&@android:color/holo_orange_dark&&&&&&&&&&&android:textColor=&@android:color/white&&&&&&&&&&&
以上是两个fragment和一个Activity的布局文件,下面来看他们的java文件
public&class&FirstActivity&extends&Activity&implements&MyListener&&&{&&&&&&&&&&&&&&&&&public&void&showMessage(int&index)&&&&&&&{&&&&&&&&&&if(1&==&index)&&&&&&&&&&&&&&&showMessageView.setText(R.string.first_page);&&&&&&&&&&if(2&==&index)&&&&&&&&&&&&&&&showMessageView.setText(R.string.second_page);&&&&&&&&&&if(3&==&index)&&&&&&&&&&&&&&&showMessageView.setText(R.string.third_page);&&&&&&}&&&&&&&&&&&&&&&&&private&TextView&showMessageV&&&&&&&&&&&&&&&&&&@Override&&&&&&public&void&onCreate(Bundle&savedInstanceState)&&&&&&&{&&&&&&&&&&super.onCreate(savedInstanceState);&&&&&&&&&&setContentView(R.layout.main);&&&&&&&&&&System.out.println(&Activity---&onCreate&);&&&&&&&&&&&&&&&FragmentManager&manager&=&getFragmentManager();&&&&&&&&&&&FragmentTransaction&transaction&=&manager.beginTransaction();&&&&&&&&&&&&&&&&&&&&&RightFragment&rightFragment&=&newRightFragment();&&&&&&&&&&&LeftFragment&leftFragment&=&newLeftFragment();&&&&&&&&&&&transaction.add(R.id.left_layout,&leftFragment,&&leftfragment&);&&&&&&&&&&transaction.add(R.id.right_layout,&rightFragment,&&rightfragment&);&&&&&&&&&&mit();&&&&&&&&&&&}&&&&&&&&&&&@Override&&&&&&protected&void&onResume()&&&&&&&{&&&&&&&&&&super.onResume();&&&&&&&&&&System.out.println(&Activity---&onResume&);&&&&&&&&&&showMessageView&=&(TextView)&findViewById(R.id.right_show_message);&&&&&&&}&&}&&
LeftFragment:
public&class&LeftFragment&extends&Fragment&&&{&&&&&&&&&&&&public&interface&MyListener&&&&&&&{&&&&&&&&&&public&void&showMessage(int&index);&&&&&&&}&&&&&&&&&&&private&MyListener&myL&&&&&&&private&Button&firstB&&&&&&&private&Button&secondB&&&&&&&private&Button&thirdB&&&&&&&&&&&&&&&&&&@Override&&&&&&public&void&onAttach(Activity&activity)&&&&&&&{&&&&&&&&&&super.onAttach(activity);&&&&&&&&&&System.out.println(&LeftFragment---&onAttach&);&&&&&&&&&&&&&&&myListener&=&(MyListener)&&&&&&&&}&&&&&&&&&&&@Override&&&&&&public&void&onCreate(Bundle&savedInstanceState)&&&&&&&{&&&&&&&&&&super.onCreate(savedInstanceState);&&&&&&&&&&System.out.println(&LeftFragment---&onCreate&);&&&&&&}&&&&&&&&&&&@Override&&&&&&public&View&onCreateView(LayoutInflater&inflater,&ViewGroup&container,&Bundle&savedInstanceState)&&&&&&{&&&&&&&&&&System.out.println(&LeftFragment---&onCreateView&);&&&&&&&&&&returninflater.inflate(R.layout.leftfragment,&container,&false);&&&&&&}&&&&&&&&&&&@Override&&&&&&public&void&onResume()&&&&&&&{&&&&&&&&&&super.onResume();&&&&&&&&&&System.out.println(&LeftFragment---&onResume&);&&&&&&&&&&&&&&&firstButton&=&(Button)&getActivity().findViewById(R.id.first_button);&&&&&&&&&&&secondButton&=&(Button)&getActivity().findViewById(R.id.second_button);&&&&&&&&&&&thirdButton&=&(Button)&getActivity().findViewById(R.id.third_button);&&&&&&&&&&&&&&&&MyButtonClickListener&clickListener&=&newMyButtonClickListener();&&&&&&&&&&&firstButton.setOnClickListener(clickListener);&&&&&&&&&&secondButton.setOnClickListener(clickListener);&&&&&&&&&&thirdButton.setOnClickListener(clickListener);&&&&&&}&&&&&&&&&&&&&&&&&class&MyButtonClickListener&implements&OnClickListener&&&&&&&{&&&&&&&&&&public&void&onClick(View&v)&&&&&&&&&&&{&&&&&&&&&&&&&&Button&button&=&(Button)&v;&&&&&&&&&&&&&&&if(button&==&firstButton)&&&&&&&&&&&&&&&&&&&myListener.showMessage(1);&&&&&&&&&&&&&&if(button&==&secondButton)&&&&&&&&&&&&&&&&&&&myListener.showMessage(2);&&&&&&&&&&&&&&if(button&==&thirdButton)&&&&&&&&&&&&&&&&&&&myListener.showMessage(3);&&&&&&&&&&}&&&&&&}&&}&&
RightFragment:
public&class&RightFragment&extends&Fragment&&&{&&&&&&@Override&&&&&&public&void&onCreate(Bundle&savedInstanceState)&&&&&&&{&&&&&&&&&&System.out.println(&RightFragment---&onCreate&);&&&&&&&&&&super.onCreate(savedInstanceState);&&&&&&}&&&&&&&&&&&@Override&&&&&&public&View&onCreateView(LayoutInflater&inflater,&ViewGroup&container,&Bundle&savedInstanceState)&&&&&&{&&&&&&&&&&System.out.println(&RightFragment---&onCreateView&);&&&&&&&&&&returninflater.inflate(R.layout.rightfragment,&container,&false);&&&&&&}&&}&&
注意,Fragment的生命周期和Activity生命周期之间的关系。在Activity里动态生成Fragment,首先是Activity调用onCreate()方法,但是这时候还没有加载到Fragment里的组件,当Fragment调用其onCreateView()方法后,Activity才能得到Fragment中的组件
这里最关键的就是Fragment要有一个接口和这个接口的引用,而这个接口需要Activity去实现它。当Fragment调用onAttach(Activity acitivity)方法的时候,将这个activity传递给这个接口引用,这样,就可以和Activity进行交互了.
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:731283次
积分:5870
积分:5870
排名:第3441名
原创:30篇
转载:161篇
评论:40条
(4)(1)(1)(1)(5)(2)(2)(1)(5)(2)(2)(8)(10)(4)(5)(4)(18)(9)(13)(14)(19)(33)(5)(1)(5)(7)(1)(2)(1)(2)(2)(5)(2)(2)匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。&&&&Activity如何改变Fragment的UI
&Activity如何改变Fragment的UI
在Activity如何改变Fragment的UI,如按返回键改变fragment里面textview的内容
若举报审核通过,可奖励20下载分
被举报人:
gaolei1201
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
Q.为什么我点的下载下不了,但积分却被扣了
A. 由于下载人数众多,下载服务器做了并发的限制。若发现下载不了,请稍后再试,多次下载是不会重复扣分的。
Q.我的积分不多了,如何获取积分?
A. 获得积分,详细见。
完成任务获取积分。
论坛可用分兑换下载积分。
第一次绑定手机,将获得5个C币,C币可。
关注并绑定CSDNID,送10个下载分
下载资源意味着您已经同意遵守以下协议
资源的所有权益归上传用户所有
未经权益所有人同意,不得将资源中的内容挪作商业或盈利用途
CSDN下载频道仅提供交流平台,并不能对任何下载资源负责
下载资源中如有侵权或不适当内容,
本站不保证本站提供的资源的准确性,安全性和完整性,同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
移动开发下载排行
您当前C币:0&&&可兑换 0 下载积分
兑换下载分:&
消耗C币:0&
立即兑换&&
兑换成功你当前的下载分为 。前去下载资源
你下载资源过于频繁,请输入验证码
如何快速获得积分?
你已经下载过该资源,再次下载不需要扣除积分
Activity如何改变Fragment的UI
所需积分:1
剩余积分:0
扫描微信二维码精彩活动、课程更新抢先知
VIP会员,免积分下载
会员到期时间:日
剩余下载次数:1000
Activity如何改变Fragment的UI
剩余次数:&&&&有效期截止到:
你还不是VIP会员VIP会员享免积分 . 专属通道极速下载
VIP下载次数已满VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员
你的VIP会员已过期VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员React-native(24)

myreact= (LinearLayout) findViewById(R.id.myReact);//原生布局中的view
mReactRootView = new ReactRootView((Activity)context);
mReactInstanceManager = ReactInstanceManager.builder()
.setApplication(((Activity) mContext).getApplication())
.setJSBundleFile(bundleFile)//设置加载文件,, 本地放一份文件。。本地实现缓存。拉接口更新此文件
.setNativeModuleCallExceptionHandler(new NativeModuleCallExceptionHandler() {
public void handleException(Exception e) {
.addPackage(new TBRnPackage())
.addPackage(new ReactImagePackage())
.setUseDeveloperSupport(false)
.setInitialLifecycleState(LifecycleState.RESUMED)
mReactRootView.startReactApplication(mReactInstanceManager, &BZMHA&, null);//启动入口
myreact.addView(mReactRootView);//添加react布局
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:7084次
排名:千里之外
原创:25篇
(27)(2)(1)(1)(2)ViewPager加fragment如何保存fragment里面的状态
ViewPager加fragment如何保存fragment里面的状态
其实思路 很简单 就是在fragment的oncreateview方法里判断 这个view是不是NULL,如果是null,则是第一次加载,那么初始化数据,否则复用这个view,只刷新需要刷新的数据,有一点注意的是,在复用这个view之前,这个view已经有了一个父布局,所以必须把它去掉,然后再添加。
代码比较简单,就不用demo了,直接上源代码:
public class F2 extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (view == null) {
view = inflater.inflate(R.layout.f, container, false);
initData();
if (view.getParent() != null) {
((ViewGroup) view.getParent()).removeView(view);
refeshData();
private void initData() {
private void refeshData() {
然后是mainactivity:
public class MainActivity extends FragmentActivity {
private ViewP
private List&Fragment& list_f = new ArrayList&Fragment&();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vp = (ViewPager) findViewById(R.id.vp);
list_f.add(new F1());
list_f.add(new F2());
list_f.add(new F3());
vp.setAdapter(new Myadpter(getSupportFragmentManager()));
class Myadpter extends FragmentPagerAdapter{
public Myadpter(FragmentManager fm) {
super(fm);
public Fragment getItem(int arg0) {
return list_f.get(arg0);
public int getCount() {
return list_f.size();
其实我建议没必要用viewpager加fragment,完全可以用viewpager+普通的view来代替,就像这个例子里的,三个fragment,当滑动到第三个的时候,第一个肯定会被销毁,也就是说viewpager总是会加载左中右三个,无论如何,fragment都被移除然后再添加,而不是像普通的activity一样可以用hide和show来控制,所以这样效率实际上是比普通的View的直接显示和隐藏要低的多的。
我的热门文章
即使是一小步也想与你分享}

我要回帖

更多关于 fragment启动activity 的文章

更多推荐

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

点击添加站长微信