[英]How does getItem() work in Android in ViewPager?
我試圖將在一個片段中單擊的圖像的位置傳遞給Pager FragmentActivity,以便在屏幕幻燈片中顯示它。 我將意圖中的位置傳遞給Pager,但是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()
一遍又一遍地(在屏幕幻燈片模式下)顯示相同圖像的情況下解決此問題。
這里是更多的代碼:
我認為問題在於您在以下代碼中的每次點擊時都開始了新的活動:
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = FooPager.newIntent(getActivity(), position);
startActivity (intent);
// mListener.OnGalleryImageSelected(imageResId);
}
});
由於Activity
重新開始,因此一切都會重置。 請參閱此示例,以找到一種更好,更標准的方式來處理您要嘗試的操作。
要將數據從Fragment
傳遞到Activity
:您可以在Pager
構建Intent
,並將其傳遞給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
的onCreate
:
Bundle extras = getIntent().getExtras();
id = extras.getInt(EXTRA_IMAGE_ID);
還應該有對空一些額外的檢查extras
和失蹤EXTRA_IMAGE_ID
,但是這是如何從獲取數據ImageListFragment
的Activity
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.