android fragmentViewPager+Fragment 如何在ViewPager的Activity中获取Fragment中的控件对象

1397人阅读
viewpager+fragment是常见的形式。viewpager在fragmentActivity中。
此时activity如何与fragment进行通信呢?前提是viewpager的页数是固定的几个
一个方法是在activity中创建一个map,key值就是viewpager中的页数,而value就是每一页中的fragment。
问题:在何处调用map.put()将fragment存入map呢?
可以在adapter中public Fragment getItem(int arg0) 中,不过会出现一个问题。如果应用按home键被压入后台,且被kill掉。
返回时,map的内容就是空的了。而且不会再走getItem方法。
解决办法是在fragment的onCreate的方法中将自己put进入该map中:如
getActivity().setFragmentMap(int, this);
此处需要对特定的fragment进行标记。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:119681次
积分:1639
积分:1639
排名:第11134名
原创:31篇
转载:48篇
评论:18条
(1)(1)(4)(1)(8)(1)(1)(3)(2)(4)(4)(2)(9)(2)(5)(12)(18)(7)Android&使用Activity+viewPager+fragment结构可能会遇到的异常
10-07 16:06:43.598: E/AndroidRuntime(277):
java.lang.RuntimeException: Unable to pause activity
{com.test.viewpager/com.test.viewpager.ViewPagerTestActivity}:
java.lang.NullPointerException
10-07 16:06:43.598: E/AndroidRuntime(277):
android.app.ActivityThread.performPauseActivity(ActivityThread.java:3348)
10-07 16:06:43.598: E/AndroidRuntime(277):
android.app.ActivityThread.performPauseActivity(ActivityThread.java:3305)
10-07 16:06:43.598: E/AndroidRuntime(277):
android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3288)
10-07 16:06:43.598: E/AndroidRuntime(277):
android.app.ActivityThread.access$2500(ActivityThread.java:125)
10-07 16:06:43.598: E/AndroidRuntime(277):
android.app.ActivityThread$H.handleMessage(ActivityThread.java:2040)
10-07 16:06:43.598: E/AndroidRuntime(277):
android.os.Handler.dispatchMessage(Handler.java:99)
10-07 16:06:43.598: E/AndroidRuntime(277):
android.os.Looper.loop(Looper.java:123)
10-07 16:06:43.598: E/AndroidRuntime(277):
android.app.ActivityThread.main(ActivityThread.java:4627)
10-07 16:06:43.598: E/AndroidRuntime(277):
java.lang.reflect.Method.invokeNative(Native Method)
10-07 16:06:43.598: E/AndroidRuntime(277):
java.lang.reflect.Method.invoke(Method.java:521)
10-07 16:06:43.598: E/AndroidRuntime(277):
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-07 16:06:43.598: E/AndroidRuntime(277):
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-07 16:06:43.598: E/AndroidRuntime(277):
dalvik.system.NativeStart.main(Native Method)
10-07 16:06:43.598: E/AndroidRuntime(277): Caused by:
java.lang.NullPointerException
10-07 16:06:43.598: E/AndroidRuntime(277):
android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1576)
10-07 16:06:43.598: E/AndroidRuntime(277):
android.support.v4.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1617)
10-07 16:06:43.598: E/AndroidRuntime(277):
android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:481)
10-07 16:06:43.598: E/AndroidRuntime(277):
android.app.Activity.performSaveInstanceState(Activity.java:1036)
10-07 16:06:43.598: E/AndroidRuntime(277):
android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1180)
10-07 16:06:43.598: E/AndroidRuntime(277):
android.app.ActivityThread.performPauseActivity(ActivityThread.java:3330)
10-07 16:06:43.598: E/AndroidRuntime(277):
&&& ... 12
问题出现在Fragment中。
原来是Fragment中加载的View中,每个view控件必须制定Id
否则就会出现上诉异常,为什么会这样,小弟暂时还没有弄清楚,只要为各个view设置Id即可。
为了更清楚的描述问题,现写了两个demo,一个是会产异常的,一个是不会产生异常的,请大家查看。下载请。
如果朋友你知道为什么Fragment必须为View设置Id的原因,请无比留言,谢谢!
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Android学习笔记24:Viewpager+Fragment+RefreshLayout布局中第一次显示的fragment中的刷新头无法显示的问题。(子View setLayoutParams无效) | DarkCrust

我要回帖

更多关于 android fragment嵌套 的文章

 

随机推荐