getItem()如何在ViewPager中的Android中运行?

时间:2017-03-05 01:43:19

标签: java android android-fragments

我正在尝试将单个片段中单击的图像的位置传递给Pager FragmentActivity,以便它在屏幕幻灯片中显示。我将意图中的位置传递给寻呼机,但是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()不知道从意图进入的位置,但我不确定如何在不使getItem()一遍又一遍地显示相同图像的情况下(在屏幕幻灯片模式下)解决此问题。

以下是更多代码:

http://pastebin.com/QgPfEisu

1 个答案:

答案 0 :(得分:2)

我认为问题在于您在以下代码中的每次点击开始新活动:

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您在Intent中构建Pager并将其传递给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_ID中选择FooPager,请将以下代码添加到FooPager的{​​{1}}:

onCreate

还应该对null Bundle extras = getIntent().getExtras(); id = extras.getInt(EXTRA_IMAGE_ID); extras进行额外检查,但这是将EXTRA_IMAGE_ID的数据传输到ImageListFragment的方式。