java - getItem() 在 Android 中的 ViewPager 中如何工作?

标签 java android android-fragments

我试图将在一个 fragment 中单击的图像的位置传递给 Pager FragmentActivity,以便它显示在屏幕幻灯片中。我将 Intent 中的位置传递给寻呼机,但 getItem() 始终从我相册中的第一张图片而不是我单击的图片开始屏幕幻灯片。

在我的 ImageListFragment 中:

public void onBindViewHolder(ViewHolder viewHolder, final int position) {

        final int imageResId = mImageResIds[position];

        viewHolder.setData(imageResId);
        viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = FooPager.newIntent(getActivity(), position);
                startActivity (intent);
               // mListener.OnGalleryImageSelected(imageResId);
            }
        });
    }

然后在我的 Pager FragmentActivity 中:

public static final String EXTRA_IMAGE_ID = "meow";
        public static int id = 0;
        private ViewPager mViewPager;
        private Integer images [] = {
        R.drawable.a, R.drawable.b,R.drawable.c,R.drawable.d,R.drawable.e,
        R.drawable.f, R.drawable.g, R.drawable.h,R.drawable.i,R.drawable.j,
        R.drawable.k, R.drawable.l, R.drawable.m,R.drawable.n,R.drawable.o,
        R.drawable.p, R.drawable.q, R.drawable.r
};

public static Intent newIntent(Context packageContext, int id) {
    Intent intent = new Intent(packageContext,FooPager.class);
    intent.putExtra(EXTRA_IMAGE_ID,id);
    return intent;
}

@Override
protected void onCreate (Bundle savedInstanceState) {
    super.onCreate (savedInstanceState);
    setContentView(R.layout.activity_image_pager);
    mViewPager = (ViewPager) findViewById (R.id.activity_image_pager_view_pager);

    FragmentManager fragmentManager = getSupportFragmentManager ();
    mViewPager.setAdapter(new FragmentStatePagerAdapter(fragmentManager) {
        @Override
        public Fragment getItem(int position) {
            int id = images[position];
            return ImageDetailFragment.newInstance(id);
        }

        @Override
        public int getCount() {
            return images.length;
        }
    });
getItem() 中的

position 始终从 0 开始,因此始终选择我的 ./drawable 目录中的第一张图像。如何使 getItem() 中的位置与我在 ImageListFragment 中单击的图像的位置一致?在这一点上,getItem() 不知道来自 Intent 的位置,但我不确定如何在不让 getItem() 显示相同图像的情况下解决这个问题一遍又一遍(在屏幕滑动模式下)。

这里是更多的代码:

http://pastebin.com/QgPfEisu

最佳答案

我认为问题在于您在以下代码中每次点击时都会启动一个新 Activity :

viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    Intent intent = FooPager.newIntent(getActivity(), position);
    startActivity (intent);
    // mListener.OnGalleryImageSelected(imageResId);
    }
});

Activity重新开始,一切都重新开始。参见 this example以更好和更标准的方式来处理您正在尝试做的事情。


Fragment 传递数据至 Activity : 你构建你的 IntentPager并将其传递给 FooPager Activity如下:

寻呼机

public static Intent newIntent(Context packageContext, int id) {
    Intent intent = new Intent(packageContext,FooPager.class);
    intent.putExtra(EXTRA_IMAGE_ID,id);
    return intent;
}

ImageListFragment

Intent intent = FooPager.newIntent(getActivity(), position);
startActivity (intent);

去取EXTRA_IMAGE_IDFooPager ,将以下代码添加到FooPageronCreate :

Bundle extras = getIntent().getExtras();
id = extras.getInt(EXTRA_IMAGE_ID);

还应该对 null extras 进行一些额外的检查和失踪 EXTRA_IMAGE_ID , 但这是从 ImageListFragment 获取数据的方法到 Activity .

关于java - getItem() 在 Android 中的 ViewPager 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42603492/

相关文章:

尝试将 Spark RDD 存储到 HBase 时出现 java.io.FileNotFoundException

java - Eclipse JSP 预览

android - 一个ScrollBar下的ListView和LineraLayout

android - 带有文本和图标的微调器

android - 使用 AOSP 更改 dts 后如何在没有 make clean 的情况下构建?

java - EditText 值未反射(reflect)出来,它显示以前的值,但是当您打印 EditText 的 getText 时,它显示正确的值

java - 我想在 Tapestry 页面中发布包含酒店的列表,但此错误反复出现

java - 通过 XML 记录进行复杂的搜索查询

android - Android中的实用类、AsyncTask、松耦合请指教

java - 在android中获取图片文件夹的文件夹大小时出错