我正在尝试将单个片段中单击的图像的位置传递给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()
一遍又一遍地显示相同图像的情况下(在屏幕幻灯片模式下)解决此问题。
以下是更多代码:
答案 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
的方式。