Java FragmentPagerAdapter在第一页显示所有片段内容
在内存中,我有一个项目列表,每个项目都有一个标题和一个0..N个块(存储一些信息)的列表。我知道我在内存中正确地创建了这个列表,因为我已经将整个结构输出到命令行 我有一个使用ViewPager显示此数据的活动。ViewPager的每一页都是一个项目,其中填充了包含项目每个区块信息的片段 按照我目前的编码方式,前两个项目的块显示在第一个项目下的第一页上。当页面滚动到第二页时,它是空的。当页面滚动到第3页时(我现在只有3个测试项目的列表),它也会显示一个空白页面,但是,当页面返回到第2页时,它会显示第一个项目的区块。然后,每次导航到第1页然后是第2页时,第3页的块都会新添加到现有列表中。如果有从第二页到第三页和第三页的导航,则第一项中的块将新添加到列表中。这可以通过不断增加的列表来完成。我不知道它为什么不能正常工作 以下是我的主要活动(包括FragmentPagerAdapter): 控制器非常简单,返回的信息与您期望的一样。Controller.setup()只创建项目列表 这是我的物品片段:Java FragmentPagerAdapter在第一页显示所有片段内容,java,android,android-fragments,android-viewpager,fragmentpageradapter,Java,Android,Android Fragments,Android Viewpager,Fragmentpageradapter,在内存中,我有一个项目列表,每个项目都有一个标题和一个0..N个块(存储一些信息)的列表。我知道我在内存中正确地创建了这个列表,因为我已经将整个结构输出到命令行 我有一个使用ViewPager显示此数据的活动。ViewPager的每一页都是一个项目,其中填充了包含项目每个区块信息的片段 按照我目前的编码方式,前两个项目的块显示在第一个项目下的第一页上。当页面滚动到第二页时,它是空的。当页面滚动到第3页时(我现在只有3个测试项目的列表),它也会显示一个空白页面,但是,当页面返回到第2页时,它会显示
public class MyFragment extends Fragment {
public final static String POSITION = "position";
private int pos;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
pos = getArguments().getInt(POSITION);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_item, container, false);
Item item = Controller.getItem(pos);
Iterator<Chunk> chunks = item.getChunks().iterator();
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
while(chunks.hasNext()){
Chunk chunk = chunks.next();
ChunkFragment entry = new ChunkFragment();
Bundle args = new Bundle();
args.putString(ChunkFragment.INFO_ARG, chunk.getInfo());
entry.setArguments(args);
transaction.add(R.id.container, entry);
}
transaction.commit();
return rootView;
}
}
public class ChunkFragment extends Fragment {
public static final String INFO_ARG = "Info";
private String mInfo;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Bundle args = getArguments();
mInfo = args.getString(INFO_ARG);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//setup view
ViewGroup rootView;
rootView = (ViewGroup) inflater.inflate(R.layout.fragment_chunk, container, false);
TextView infoView = (TextView) rootView.findViewById(R.id.info_text);
infoView.setText(mInfo);
return rootView;
}
}
我知道这是很多代码,但我不知道问题出在哪里。我已将其简化到最低限度,只包括可能导致问题的操作。我还没有包括我的XML布局文件,但它们已经过测试,运行良好。对此我不确定,但我相信您的问题可能与在ViewPager中的片段中实例化片段的困难有关
你可以考虑取消这个作为一个可能性:这基本上归结为在你想要添加一个片段的片段中使用<代码> GeHealStReMistMaungMeor(< /代码>)。
也可以考虑扩展<代码> FractStasePigaServer < /代码>,这更好地保持了它们的破坏和恢复之间的碎片状态。
因此,我应该直接从PigelAdvor创建子片段吗?没关系,我现在明白正在发生的事情。是的,事实证明你是完全正确的。非常感谢。我也对你的问题感到困惑,然后突然想起遇到过类似的问题。我很高兴能帮上忙!MyFragment.onCreate()不处理旁注,应该检查savedInstance是否为null。只需在第一次创建片段时添加内容。这就是为什么我得到了复制品。public class ChunkFragment extends Fragment {
public static final String INFO_ARG = "Info";
private String mInfo;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Bundle args = getArguments();
mInfo = args.getString(INFO_ARG);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//setup view
ViewGroup rootView;
rootView = (ViewGroup) inflater.inflate(R.layout.fragment_chunk, container, false);
TextView infoView = (TextView) rootView.findViewById(R.id.info_text);
infoView.setText(mInfo);
return rootView;
}
}