我讨厌发布代码,并问为什么它不起作用,但我现在不知所措.我试过在下面运行下面的类,我在logcat中得到一个异常,我无法解释.即使谷歌搜索产生的结果也很少.也许我只是不了解生态系统,但例外的信息很少.我得到的例外情况如下:
03-06 21:50:43.031: E/AndroidRuntime(1013): FATAL EXCEPTION: main
03-06 21:50:43.031: E/AndroidRuntime(1013): android.content.res.Resources$NotFoundException: Unable to find resource ID #0xffffffff
03-06 21:50:43.031: E/AndroidRuntime(1013): at android.content.res.Resources.getResourceName(Resources.java:1659)
03-06 21:50:43.031: E/AndroidRuntime(1013): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:903)
03-06 21:50:43.031: E/AndroidRuntime(1013): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
03-06 21:50:43.031: E/AndroidRuntime(1013): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
03-06 21:50:43.031: E/AndroidRuntime(1013): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
03-06 21:50:43.031: E/AndroidRuntime(1013): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461)
03-06 21:50:43.031: E/AndroidRuntime(1013): at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
03-06 21:50:43.031: E/AndroidRuntime(1013): at android.support.v4.view.ViewPager.populate(ViewPager.java:1012)
03-06 21:50:43.031: E/AndroidRuntime(1013): at android.support.v4.view.ViewPager.populate(ViewPager.java:881)
03-06 21:50:43.031: E/AndroidRuntime(1013): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1366)
03-06 21:50:43.031: E/AndroidRuntime(1013): at android.view.View.measure(View.java:15513)
03-06 21:50:43.031: E/AndroidRuntime(1013): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4827)
03-06 21:50:43.031: E/AndroidRuntime(1013): …Run Code Online (Sandbox Code Playgroud) 我一直看到我的ViewPager和我自己的FragmentStatePagerAdapter有一些奇怪的行为.
我的视图层次结构如下:
-> (1) Fragment root view (RelativeLayout)
-> (2) ViewPager
-> (3) ViewPager's current fragment view
Run Code Online (Sandbox Code Playgroud)
当负责片段根视图(1)的片段被隐藏(在片段事务中使用.hide())然后显示(使用.show())时,当前在ViewPager中显示的片段视图(3) )虽然片段仍然存在,但变为null.基本上,我的ViewPager变得完全空白/透明.
我找到解决这个问题的唯一方法是打电话
int current = myViewPager.getCurrentItem();
myViewPager.setAdapter(myAdapter);
myViewPager.setCurrentItem(current);
Run Code Online (Sandbox Code Playgroud)
显示父片段后.这会以某种方式触发视图重新创建并显示在屏幕上.不幸的是,这偶尔会导致异常处理寻呼机适配器unregisterDataSetObserver()在旧观察者上调用两次.
有一个更好的方法吗?我想我要问的是:
当隐藏ViewPager的父片段时,为什么我的ViewPager中的片段视图会被销毁?
更新:当应用程序"最小化"然后"恢复"(通过按下主页操作键然后返回)时,也会发生这种情况.
每个请求,这是我的寻呼机适配器类:
public class MyInfoSlidePagerAdapter extends FragmentStatePagerAdapter {
private ArrayList<MyInfo> infos = new ArrayList<MyInfo>();
public MyInfoSlidePagerAdapter (FragmentManager fm) {
super(fm);
}
public MyInfoSlidePagerAdapter (FragmentManager fm, MyInfo[] newInfos) {
super(fm);
setInfos(newInfos);
}
@Override
public int getItemPosition(Object object) {
int position = infos.indexOf(((MyInfoDetailsFragment)object).getMyInfo());
return position > 0 ? position : …Run Code Online (Sandbox Code Playgroud) 我使用的是ViewPager与FragmentStatePagerAdapter让一些片段之间的导航.
比方说,我有三个片段:A,B和C.ViewPager最初显示片段A,并允许您通过从右向左滑动,然后再次滑动到片段C来导航到片段B. 这允许以下导航路径:A <--> B <--> C.
我想要的是能够在片段A上从左向右滑动并让ViewPager显示片段C,即它表现为循环队列并允许 ... --> C <--> A <--> B <--> C <--> A <-- ...
我不希望片段在其他位置重复(即最终有三个以上的实例).
使用ViewPager可以实现这种包装功能吗?
我有一个带有ViewPager的Activity,它显示了一堆图片.启动时,ViewPager的位置根据用户在上一个Activity中选择的内容进行设置.类似于画廊.
我希望每次选择新页面时调用onPageSelected,即首次打开活动时或用户滑动到新页面时.
我设置起点如下:
mPager.setCurrentItem(index);
Run Code Online (Sandbox Code Playgroud)
一切正常,除非在将index设置为0的情况下调用setCurrentItem,因为这不会触发onPageSelected.
mPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int index) {
Log.d(TAG, "onPageSelected " + index);
}
...
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是; 这是一个错误,如果是这样,我该怎么办呢?
我正在使用Jake的ViewPageIndicator,并希望像滑动图库一样显示图像.我可以开始的任何推荐链接.我已经实现了基本的viewpager,现在想要实现图像视图,如下所示

是否可以使用ViewPageIndicator实现?
我被困在这里,从片段中的Button开始活动时出现问题.这是我的代码:
ViewPagerAdapter.java
import java.util.List;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
public class ViewPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
public ViewPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public int getCount() {
return this.fragments.size();
}
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
}
Run Code Online (Sandbox Code Playgroud)
ViewPagerActivity.java
import java.util.List;
import java.util.Vector;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.util.Log;
import com.package.here.Class1Overview;
import com.package.here.Class1Overview;
import com.package.here.Class1Overview;
public class ViewPagerActivity extends FragmentActivity{
@Override
protected void onCreate(Bundle savedInstanceState) { …Run Code Online (Sandbox Code Playgroud) android android-fragments android-viewpager android-activity
我在a上设置了一个单击侦听器ViewPager,但是从不调用onClick事件.我猜触摸事件检测ViewPager是干扰,但我看不出如何解决它...
有人可以帮忙吗?
谢谢
mViewPager.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// never called
}
});
Run Code Online (Sandbox Code Playgroud) 从另一个片段返回后,片段不会重新附加到其宿主ViewPager.
一个托管片段的活动,其布局包含ViewPager(PageListFragment在下面的示例中).ViewPager由FragmentStateViewPagerAdapter填充.托管内部托管的单个片段(PageFragment在下面的示例中)可以打开包含一组新页面的子页面列表.
只要没有按下后退按钮,一切正常.一旦用户关闭其中一个子页面列表,就会重新创建先前的列表,但不会显示先前显示的页面.在父页面列表中的其他页面上滑动仍然有效.
可以在github上找到示例应用程序:
public class MainActivity extends FragmentActivity {
private static final String CURRENT_FRAGMENT = MainActivity.class.getCanonicalName() + ".CURRENT_FRAGMENT";
public static final String ARG_PARENTS = "Parents";
public void goInto(String mHostingLevel, String mPosition) {
Fragment hostingFragment = newHostingFragment(mHostingLevel, mPosition);
addFragment(hostingFragment);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addBaseFragment();
}
private void addBaseFragment() {
Fragment hostingFragment = newHostingFragment("", "");
addFragment(hostingFragment);
}
private Fragment newHostingFragment(String mHostingLevel, String oldPosition) {
Fragment …Run Code Online (Sandbox Code Playgroud) 我有一个片段(我会称之为pagerFragment),它被添加到后台并且可见.它拥有viewPager一个FragmentPagerAdapter.在FragmentPagerAdapter持有(假设)两个片段:A和B.
首先添加片段效果很好.
片段A有一个按钮,一旦点击,就会在后台堆叠中添加一个片段(C).
问题是:如果我添加该片段(C),然后单击返回,pagerAdapter则为空,我看不到里面的任何片段.
如果我使用hack,并破坏pagerFragments中的子片段(A和B)onDestroyView(),这解决了问题,虽然我不想使用这个hack.
任何想法可能是什么问题?
android android-fragments android-viewpager fragmentpageradapter back-stack