简体   繁体   English

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

[英]How does getItem() work in Android in ViewPager?

I am trying to pass the position of an image that is clicked in one fragment to a Pager FragmentActivity so that it's displayed in a screen slide. 我试图将在一个片段中单击的图像的位置传递给Pager FragmentActivity,以便在屏幕幻灯片中显示它。 I pass the position in the intent to the Pager, but the getItem() always starts the screen slide from the first image in my album instead of the image that I clicked. 我将意图中的位置传递给Pager,但是getItem()始终从相册中的第一张图片而不是我单击的图片开始屏幕幻灯片。

In my ImageListFragment : 在我的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);
            }
        });
    }

And then in my Pager FragmentActivity: 然后在我的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;
        }
    });

position in getItem() always starts at 0, and therefore always selects the first image in my ./drawable directory. getItem()中的position始终从0开始,因此始终选择./drawable目录中的第一张图像。 How do I make it so that the position in getItem() is consistent with the position of the image that I am clicking in my ImageListFragment ? 如何使它在getItem()中的位置与我在ImageListFragment单击的图像的位置一致? At this point, getItem() is unaware of the position coming in from the intent, but I am not sure how to fix this without making getItem() display the same image over and over (in screen slide mode). 此时, getItem()尚不知道意图所带来的位置,但是我不确定如何在不使getItem()一遍又一遍地(在屏幕幻灯片模式下)显示相同图像的情况下解决此问题。

Here is more of the code: 这里是更多的代码:

http://pastebin.com/QgPfEisu http://pastebin.com/QgPfEisu

I think the problem is that you are starting a new activity on each click in the following code: 我认为问题在于您在以下代码中的每次点击时都开始了新的活动:

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

Since the Activity is starting over, everything resets. 由于Activity重新开始,因此一切都会重置。 See this example for a better and more standard way to handle what you are trying to do. 请参阅此示例,以找到一种更好,更标准的方式来处理您要尝试的操作。


To pass data from Fragment to Activity : You build your Intent in Pager and pass it to the FooPager Activity as follows: 要将数据从Fragment传递到Activity您可以在Pager构建Intent ,并将其传递给FooPager Activity ,如下所示:

Pager 呼叫器

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

ImageListFragment ImageListFragment

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

To pick up EXTRA_IMAGE_ID in FooPager , add the following code to FooPager 's onCreate : 要在EXTRA_IMAGE_IDFooPager ,请将以下代码添加到FooPageronCreate

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

There should also be some additional checking for null extras and missing EXTRA_IMAGE_ID , but this is how to get data from ImageListFragment to the Activity . 还应该有对空一些额外的检查extras和失踪EXTRA_IMAGE_ID ,但是这是如何从获取数据ImageListFragmentActivity

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM