fragment与viewpager嵌套的是viewpager什么意思

Android(9)
前一段时间要实现一个广告的效果,就是viewpager嵌套了fragment,每个viewpager要可以删除掉,不再展示给用户。
最初做的时候,以为比较简单,认为:删除数据,通知适配器更新数据,然后就好了。结果完全不是那么回事。删除数据,更新适配器,但是仍然不能正常的删除掉fragment。经过不断的努力发现有两种方案。
第一种方案:
如果你已经写好了viewpager和FragmentPagerAdapter的子类,才发现了这个问题。那么就可以采用第一种方案。将FragmentPagerAdapter替换为FragmentStatePagerAdapter,另外重写自己Adapter的方法--getItemPosition(),让其返回PagerAdapter.POSITION_NONE即可;
第二种方案:
这个方案要修改的地方多一点,但是是一个更加主流的修改方案
/questions//remove-fragment-page-from-viewpager-in-android
另外想说的是真的是一个好地方
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:8264次
排名:千里之外
原创:14篇
(1)(2)(2)(2)(2)(4)(1)17:49 提问
ViewPager 嵌套 fragment 中无法显示fragment中的listview内容
我在viewpager中用fragment作为加载页,然后在fragment中嵌入了一个listview,单独测试时fragment能载入listview内容,但是在viewpager中加载fragment时,无法显示listview内容,fragment其他组件能显示
viewpager 代码:
import java.util.ArrayL
import java.util.L
import com.nineteen.myandroid.R;
import android.app.A
import android.os.B
import android.support.v4.app.FragmentA
import android.support.v4.view.PagerA
import android.support.v4.view.ViewP
import android.text.L
import android.view.LayoutI
import android.view.V
import android.view.ViewG
public class AppUninstall extends FragmentActivity {
ViewPager viewP
List views = new ArrayList();
List titles = new ArrayList();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.app_uninstall);
viewPager = (ViewPager) findViewById(R.id.viewpager);
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.id.appun_person, null);
views.add(view);
titles.add("个人应用");
view = inflater.inflate(R.layout.test_relatvelayout, null);
views.add(view);
titles.add("系统预装");
view = inflater.inflate(R.layout.test_button, null);
views.add(view);
titles.add("猜你不喜欢");
viewPager.setAdapter(new MyPagerAdapter(views, titles));
class MyPagerAdapter extends PagerAdapter {
List&View&
List&String&
public MyPagerAdapter(List&View& views, List&String& titles) {
this.views =
this.titles =
public int getCount() {
return views.size();
public boolean isViewFromObject(View view, Object object) {
return view ==
// 获取到标题
public CharSequence getPageTitle(int position) {
return titles.get(position);
public Object instantiateItem(ViewGroup container, int position) {
container.addView(views.get(position));
return views.get(position);
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(views.get(position));
viewpage XML:
android:id="@+id/appun_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center" &
&android.support.v4.view.PagerTabStrip
android:id="@+id/pager_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top" /&
&/android.support.v4.view.ViewPager&
fragment代码:
import java.util.ArrayL
import java.util.HashM
import java.util.L
import com.nineteen.myandroid.R;
import android.os.B
import android.support.v4.app.FragmentA
import android.widget.ListV
import android.widget.SimpleA
public class PersonApp extends FragmentActivity {
List& list = new ArrayList&();
ListView listV
int[] icon = { R.drawable.a005, R.drawable.a006, R.drawable.a007,
R.drawable.a008, R.drawable.a009, R.drawable.a010, R.drawable.a011,
R.drawable.a012, R.drawable.a013, R.drawable.a014, R.drawable.a015,
R.drawable.a016, R.drawable.a017, R.drawable.a018, R.drawable.a019 };
String[] name = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11",
"12", "13", "14", "14" };
float[] size = { 1.10f, 1.10f, 1.1f, 1.1f, 1.1f, 1.1f, 1.1f, 1.1f, 1.1f,
1.1f, 1.1f, 1.1f, 1.1f, 1.1f, 2.0f };
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setContentView(R.layout.app_uninstall_listview);
listView = (ListView) findViewById(R.id.app_uninstall_listview);
List&HashMap&String, Object&& list = new ArrayList&HashMap&String, Object&&();
for (int i = 0; i & icon. i++) {
HashMap&String, Object& map = new HashMap&String, Object&();
map.put("icon", icon[i]);
map.put("name", name[i]);
map.put("size", size[i]);
list.add(map);
SimpleAdapter adapter = new SimpleAdapter(this, list,
R.layout.app_uninstallitem, new String[] { "icon", "name",
"size" }, new int[] { R.id.appun_imageview,
R.id.appun_nameview, R.id.app_unitem_size });
listView.setAdapter(adapter);
fragment XML:
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:orientation="vertical" &
&LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="2dp" &
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="手机内存" /&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="80dp"
android:text="已用" /&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1.31" /&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="GB" /&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:text="," /&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="剩余" /&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1.15" /&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="GB" /&
&/LinearLayout&
&ProgressBar
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="5dp"
android:max="100"
android:progress="52" /&
&LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="2dp" &
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="SD卡" /&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="104dp"
android:text="已用" /&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1.31" /&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="GB" /&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:text="," /&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="剩余" /&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1.15" /&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="GB" /&
&/LinearLayout&
&ProgressBar
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="5dp"
android:max="100"
android:progress="52" /&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:padding="3dp"
android:text="最近使用" /&
android:id="@+id/app_uninstall_listview"
android:layout_width="match_parent"
android:layout_height="match_parent" &
&/ListView&
&/LinearLayout&
按赞数排序
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!
需要重新创建Adapter
其他相似问题查看: 667|回复: 13
ViewPager嵌套着fragment,为什么可以直接findViewById找到fragment中...
签到天数: 33 天连续签到: 1 天[LV.5]常住居民I主题帖子e币
环境: 我使用的是Viewpager嵌套fragment, fragment的视图是在 main01.xml中的,其中有TextView,button,imageView等控件,而activity里面就放了一个viewpager,主activity动态加载fragment.
问题:现在我需要将网上面读回来的数据显示到fragment中,
&&①为什么我直接使用findViewById可以成功把数据setText到这些控件中? 这些控件不都是在main01.xml中的吗?
&&②重启应用程序,发现是闪退,log显示时NullPointerException,为什么第一次可以成功,第二次就抛出异常了呢???
跪求解答!
请在fragment里面写你那个textview的事件。非要从activity里面写也可以,不过不能直接set,比如在fragment里面写一个函数:
public void setTextView(String text){this.text=text}//this.text是fragment的全局变量
在fragment的oncreatview里面初始化时先判断非空,再把值传给textview。
记住:fragment在启动时或者在重启时,非UI的东西是可以最先加载的不会空指针的。UI的东西都是在onCreatView里面初始化后才会被执行。
签到天数: 16 天连续签到: 1 天[LV.4]偶尔看看III主题帖子e币
请在fragment里面写你那个textview的事件。非要从activity里面写也可以,不过不能直接set,比如在fragment里面写一个函数:
public void setTextView(String text){this.text=text}//this.text是fragment的全局变量
在fragment的oncreatview里面初始化时先判断非空,再把值传给textview。
记住:fragment在启动时或者在重启时,非UI的东西是可以最先加载的不会空指针的。UI的东西都是在onCreatView里面初始化后才会被执行。
你第一次是可以的说明你的findbyid是后于fragment的oncreatview执行的。至于第二次不行,呵呵,你以为代码都是跟着先后顺序执行的么?你开一个线程,然后在线程的下边再写一个语句,肯定是线程先执行没错,但是谁完成任务最快呢?根本说不准。
我支持: 5 &
签到天数: 179 天连续签到: 1 天[LV.7]常住居民III主题帖子e币
独立于外面的控件 xml的layout文件 就是可以直接 findviewById找到的 因为你的视图是独立于碎片存在的 而造成空指针可能是由于VP对fragment的回收机制造成的 大概就是这样
我是重启程序onDestory掉了,并不是onStop,请问这样跟VP回收机制还有关吗?我是实在搞不明白呀~~&
签到天数: 33 天连续签到: 1 天[LV.5]常住居民I主题帖子e币
独立于外面的控件 xml的layout文件 就是可以直接 findviewById找到的 因为你的视图是独立于碎片存在的 而造 ...
我是重启程序onDestory掉了,并不是onStop,请问这样跟VP回收机制还有关吗?我是实在搞不明白呀~~
签到天数: 1 天连续签到: 1 天[LV.1]初来乍到主题帖子e币
给控件 标明id,在试试
我给控件有分配ID呀,没看懂您的意思呀~&
签到天数: 33 天连续签到: 1 天[LV.5]常住居民I主题帖子e币
给控件 标明id,在试试
我给控件有分配ID呀,没看懂您的意思呀~
签到天数: 4 天连续签到: 1 天[LV.2]偶尔看看I主题帖子e币
也许是 fragment生命周期。。。也许
签到天数: 11 天连续签到: 2 天[LV.3]偶尔看看II主题帖子e币
。。。也许。。。
看不懂呀 大哥!!!若知道原因,请详细告诉我呀&
我支持: 0 我反对: 5 有帮助: 0 &
签到天数: 33 天连续签到: 1 天[LV.5]常住居民I主题帖子e币
。。。也许。。。
看不懂呀 大哥!!!若知道原因,请详细告诉我呀
签到天数: 33 天连续签到: 1 天[LV.5]常住居民I主题帖子e币
已解决,是我对象没找对的缘故!关闭该问题!
推荐阅读热门话题
61884420384327281281261261251226218210208203715
半小时前半小时前半小时前1&小时前2&小时前2&小时前3&小时前3&小时前5&小时前6&小时前7&小时前10&小时前昨天&23:40昨天&23:10昨天&21:04昨天&19:40
Powered by

我要回帖

更多关于 fragment中viewpager 的文章

 

随机推荐