Mit*_*lad 69 android android-fragments android-viewpager
我有一个带有ViewPager三个和三个Fragment的应用程序.我正在试图弄清楚如何让当前Fragment被观看,以便我可以得到它的论据.
我OnPageChangeListener抓住了当前页面索引,但是
ViewPager.getChildAt(int position);
Run Code Online (Sandbox Code Playgroud)
返回一个View.这View和现在的关系是什么Fragment?
sdl*_*sdl 18
我反过来解决了这个问题.我没有从活动中搜索片段,而是在它的所有者活动的onAttach()方法中注册片段,并在onStop()方法中取消注册.基本理念:
分段:
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try{
mActivity = (IMyActivity)activity;
}catch(ClassCastException e){
throw new ClassCastException(activity.toString() +" must be a IMyActivity");
}
mActivity.addFragment(this);
}
@Override
public void onStop() {
mActivity.removeFragment(this);
super.onStop();
}
Run Code Online (Sandbox Code Playgroud)
IMyActivity:
public interface IFriendActivity {
public void addFragment(Fragment f);
public void removeFragment(Fragment f);
}
Run Code Online (Sandbox Code Playgroud)
MyActivity:
public class MyActivity implements IMyActivity{
[...]
@Override
public void addFragment(Fragment f) {
mFragments.add(f);
}
@Override
public void removeFragment(Fragment f) {
mFragments.remove(f);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑 - 不要这样做.如果你有诱惑,请阅读评论为什么这是一个坏主意.
在奇怪的机会你仍然试图解决这个问题:
扩展FragmentPagerAdapter.在构造函数中,构建所需的Fragments并将它们存储在Fragments的List(array/ArrayList)中.
private final int numItems = 3;
Fragment[] frags;
public SwipeAdapter (FragmentManager fm) {
super(fm);
//Instantiate the Fragments
frags = new Fragment[numItems];
Bundle args = new Bundle();
args.putString("arg1", "foo");
frags[0] = new MyFragment();
frags[1] = new YourFragment();
frags[2] = new OurFragment();
frags[2].setArguments(args);
}
Run Code Online (Sandbox Code Playgroud)
然后getItem(int position),你可以做类似的事情
public Fragment getItem(int position) {
return frags[position];
}
Run Code Online (Sandbox Code Playgroud)
我不确定这是否是普遍接受的做法,但它对我有用.
编辑
这真的不是一个好方法.如果您计划处理方向更改或您的应用程序进入后台,那么这可能会破坏您的代码.有关详细信息,请阅读此答案下方的评论.而是使用@James的答案
| 归档时间: |
|
| 查看次数: |
69970 次 |
| 最近记录: |