gpt4 book ai didi

android - 每次实例化 fragment (再次创建)时如何创建一个新的 ViewPager? (寻呼机在 fragment 破坏中幸存下来。)

转载 作者:太空狗 更新时间:2023-10-29 13:35:35 26 4
gpt4 key购买 nike

如何在每次删除 fragment (重新创建)时创建一个新的 ViewPager?我的寻呼机在 fragment 破坏中幸存下来。

我在 fragment 中有一个 ViewPager,但是当我从 FrameLayout 中删除 fragment 并将其添加回来时。他的 ViewPager 与旧 fragment 实例相同(我确实认为是)但是所有 fragment 都消失了(空寻呼机是空的 :( )。我怎样才能再次重新创建 ViewPager?

此代码在我的 fragment 的 onCreateView() 方法中:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View fragment = inflater.inflate(getLayoutID(), container,false);
ViewPager pager = (ViewPager) fragment.findViewById(R.id.myPager);

PagerAdapter newAdapter = new MyPagerAdapter(getFragmentManager(), getFragments());
pager.setAdapter(newAdapter);

return fragment;
}

我认为这就是你们需要知道的全部内容。

最佳答案

现在我知道我不能在 fragment 中包含 fragment ,我用一个 View 数组做了这个 ViewPagerAdapter,你可以传递(可以是任何你想要的)并用它显示。代码来了:

ViewPagerAdapter

import java.util.List;

import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;

public class ViewPagerAdapter extends PagerAdapter{

private List<View> pages;

public ViewPagerAdapter(List<View> pages) {
this.pages = pages;
}



@Override
public Object instantiateItem(View collection, int position) {
((ViewPager) collection).addView(pages.get(position),0);

return pages.get(position);
}

@Override
public int getCount() {
return pages.size();
}

@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}

/**
* Remove a page for the given position. The adapter is responsible
* for removing the view from its container, although it only must ensure
* this is done by the time it returns from {@link #finishUpdate()}.
*
* @param container The containing View from which the page will be removed.
* @param position The page position to be removed.
* @param object The same object that was returned by
* {@link #instantiateItem(View, int)}.
*/
@Override
public void destroyItem(View collection, int position, Object view) {
((ViewPager) collection).removeView((View) view);
}

@Override
public boolean isViewFromObject(View view, Object object) {
return view==((View)object);
}

/**
* Called when the a change in the shown pages has been completed. At this
* point you must ensure that all of the pages have actually been added or
* removed from the container as appropriate.
* @param container The containing View which is displaying this adapter's
* page views.
*/
@Override
public void finishUpdate(View arg0) {}

@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {}

@Override
public Parcelable saveState() {
return null;
}

@Override
public void startUpdate(View arg0) {}
}

这里有一个额外的抽象 fragment ,您可以在其中重写抽象方法,瞧:

AbstractPagerFragment

import java.util.List;

import templateDigital.util.ViewPagerAdapter;


import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public abstract class AbstractPagerFragment extends Fragment {

private ViewPager pager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment

View fragment = inflater.inflate(getLayoutID(), container,false);
setRetainInstance(false);
PagerAdapter mPagerAdapter = new ViewPagerAdapter(getViews());
pager = (ViewPager) fragment.findViewById(getPagerID());
pager.setAdapter(mPagerAdapter);
pager.getAdapter().notifyDataSetChanged();

return fragment;
}


public abstract List<View> getViews();

public abstract int getLayoutID();

public abstract int getPagerID();

@Override
public void onDestroy() {
super.onDestroy();
pager = null;
System.gc();
}


}

关于android - 每次实例化 fragment (再次创建)时如何创建一个新的 ViewPager? (寻呼机在 fragment 破坏中幸存下来。),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11004258/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com