[英]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: 这里是更多的代码:
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_ID
中FooPager
,请将以下代码添加到FooPager
的onCreate
:
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
,但是这是如何从获取数据ImageListFragment
的Activity
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.