簡體   English   中英

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

[英]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()一遍又一遍地(在屏幕幻燈片模式下)顯示相同圖像的情況下解決此問題。

這里是更多的代碼:

http://pastebin.com/QgPfEisu

我認為問題在於您在以下代碼中的每次點擊時都開始了新的活動:

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_IDFooPager ,請將以下代碼添加到FooPageronCreate

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

還應該有對空一些額外的檢查extras和失蹤EXTRA_IMAGE_ID ,但是這是如何從獲取數據ImageListFragmentActivity

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM