- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在内存中,我有一个项目列表,每个项目都有一个标题和一个 0..N block 列表(其中存储了一些信息)。我知道我在内存中正确地创建了这个列表,因为我已经将整个结构输出到命令行。
我有一个使用 ViewPager 来显示此数据的 Activity 。 ViewPager 的每个页面都是一个 Item,它充满了 Fragments,这些 Fragments 包含有关 Item 每个 block 的信息。
按照我目前的编码方式,前两个项目的 block 显示在第一个项目下的第一页上。当页面滚动到第二页时,它是空的。当页面滚动到第 3 页时(我现在只有 3 个项目的列表用于测试)它也显示一个空白页面,但是,当页面返回到第 2 页时,它显示第一个项目的 block .然后,每次导航到第 1 页然后第 2 页时,第 3 页的 block 都会新添加到现有列表中。如果有从第 2 页到第 3 页再返回的导航,第 1 项的 block 将新添加到列表中。这可以通过不断增长的列表来令人作呕。我不知道为什么它的行为不正常。
这是我的主要 Activity (包括 FragmentPagerAdapter):
public class MyActivity extends FragmentActivity {
MyPagerAdapter mPagerAdapter;
ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Controller.setup();
mPagerAdapter = new MyPagerAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mPagerAdapter);
}
public class MyPagerAdapter extends FragmentPagerAdapter {
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment fragment = new MyFragment();
Bundle args = new Bundle();
args.putInt(MyFragment.POSITION, position);
fragment.setArguments(args);
return fragment;
}
@Override
public int getCount(){
return Controller.getAmount();
}
@Override
public CharSequence getPageTitle(int position) {
return Controller.getItem(position).getTitle();
}
}
}
Controller 非常简单,返回的信息正如您所期望的那样。 Controller.setup() 只是创建项目列表。
这是我的项目 fragment :
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;
}
}
最后是我的 Chunk fragment :
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 的 Fragments 中实例化 Fragments 的困难有关。
您可以考虑将其取消资格作为一种可能性 by following the guidelines for nesting fragments :这基本上归结为在要添加 fragment 的 fragment 上使用 getChildFragmentManager()
。
此外,您可能需要考虑扩展 FragmentStatePagerAdapter
,它可以更好地维护 fragment 在销毁和重建之间的状态。
关于java - FragmentPagerAdapter 在第一页显示所有 fragment 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15795655/
SCENARIO 有两页,第一页是HomePage,它在flutter_bloc软件包的帮助下自动获取api数据。在首页(第一页)中,还有一个按钮,可在此代码Navigator.push(contex
我检查过类似的问题,但由其他人发布,但我仍然看不到我的代码有什么问题。 我刚刚从文档中复制了它 - https://symfony.com/doc/3.4/page_creation.html Luc
我已经编写了一段代码,使用Python中的Scrapy来抓取页面。下面我粘贴了 main.py 代码。但是,每当我运行我的蜘蛛时,它仅从第一页抓取(DEBUG:从抓取),这也是请求中的Referer标
我创建了一个 ios 图书阅读器应用程序。在这个应用程序中,我集成了 google drive 和 skydrive 。现在我可以从 google drive 和 skydrive 登录和检索数据了。
效果图: 功能简介:可使用上下键选中行,选中后点击修改,textbox获得gridview中的代码的数据。对你有帮助的话,请记得要点击“好文要顶”哦!!!不懂的,请留言。废话不多说了,贴码如下
我是一名优秀的程序员,十分优秀!