2017-03-04 18 views
0

私のMainActivityのImageListFragmentフラグメントに表示される画像のリストがあります。その画像の1つをクリックするとImageDisplayFragmentの内部にFooPagerという名前の画像が開きます。私はFooPagerアクティビティを作成しました。その結果、ImageListFragmentでクリックされたイメージが表示されると、ユーザーはスワイプしてすべてのイメージを表示できます。私が持っている問題は、私がImageListFragmentで表示したい画像をクリックすると、私がクリックした実際の画像ではなく、/drawableディレクトリの最初の画像が表示されるということです。私は何が間違っているのか分かりません。ここでフラグメント付きのViewPagerの使用

ImageListFragment次のとおりです。

public class ImageListFragment extends Fragment { 
    private int[] mImageResIds; 
    private OnGalleryImageSelected mListener; 
    public static ImageListFragment newInstance() { 
    return new ImageListFragment(); 
} 
@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 

    mListener = (OnGalleryImageSelected) context; 

    final Resources resources = context.getResources(); 
    final TypedArray typedArray = resources.obtainTypedArray(R.array.images); 
    final int imageCount = 18; 
    mImageResIds = new int[imageCount]; 
    for (int i = 0; i < imageCount; i++) { 
     mImageResIds[i] = typedArray.getResourceId(i, 0); 
    } 
    typedArray.recycle(); 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    final View view = inflater.inflate(R.layout.fragment_image_list, container, false); 

    final Activity activity = getActivity(); 
    final RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view); 
    recyclerView.setLayoutManager(new LinearLayoutManager(activity)); 
    recyclerView.setAdapter(new GalleryImageAdapter(activity)); 
    return view; 
} 

class GalleryImageAdapter extends RecyclerView.Adapter<ViewHolder> { 

    private LayoutInflater mLayoutInflater; 

    public GalleryImageAdapter(Context context) { 
     mLayoutInflater = LayoutInflater.from(context); 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { 
     return new ViewHolder(mLayoutInflater 
       .inflate(R.layout.recycler_view, viewGroup, false)); 
    } 

    @Override 
    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) { 
       System.out.println(imageResId); 
       Intent intent = FooPager.newIntent(getActivity(),imageResId); 
       startActivity (intent); 
       // mListener.OnGalleryImageSelected(imageResId); 
      } 
     }); 
    } 

    @Override 
    public int getItemCount() { 
     return mImageResIds.length; 
    } 
} 

class ViewHolder extends RecyclerView.ViewHolder { 
    private ImageView mImageView; 
    private ViewHolder(View itemView) { 
     super(itemView); 
     mImageView = (ImageView) itemView.findViewById(R.id.gallery_image); 

    } 
    private void setData(int imageResId) { 
     mImageView.setImageResource(imageResId); 
    } 
} 
public interface OnGalleryImageSelected { 
    void OnGalleryImageSelected(int imageResId); 
} 
} 

は、これは私のポケットベルの活動は次のようになります。

public class FooPager extends FragmentActivity{ 
    public static final String EXTRA_IMAGE_ID = "meow"; 
    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) { 
      System.out.println(images[position]); 
      int id = images[position]; 
      return ImageDetailFragment.newInstance(id); 
     } 

     @Override 
     public int getCount() { 
      return images.length; 
     } 
    }); 

    for (int i=0; i < images.length; i++) { 
      mViewPager.setCurrentItem(i); 
      break; 
    } 
    } 
} 

そしてImageDetailFragmentフラグメント:

public class ImageDetailFragment extends Fragment { 
    private static final String IMAGE_ID = "imageResId"; 

    public static ImageDetailFragment newInstance(int imageResId) { 

    final Bundle args = new Bundle(); 
    args.putInt(IMAGE_ID, imageResId); 
    final ImageDetailFragment fragment = new ImageDetailFragment(); 
    fragment.setArguments(args); 
    return fragment; 
} 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    final View view = inflater.inflate(R.layout.fragment_image_details, container, false); 
    final ImageView imageView = (ImageView) view.findViewById(R.id.gallery_image); 
    final Bundle args = getArguments(); 
    imageView.setImageResource(args.getInt(IMAGE_ID)); 
    return view; 
} 

} 

私は私のFooPager活動をどのように修正すればよいです実際にクリックした画像が表示されますImageListFragment以内?

答えて

0

それは私の/描画可能ディレクトリの代わりに、 私はあなたのFooPager活動に

をクリックして、実際の画像では非常に最初の画像を表示する、これはあなたのviewpagerの最初の項目が表示されます。それは最初の項目を表示(I = 0をとブレーク)理由

for (int i=0; i < images.length; i++) { 
      mViewPager.setCurrentItem(i); 
      break; 
    } 

あなたは、FooPagerImageListFragmentからpositionを送信しないimageResIdmViewPager.setCurrentItem(position)を設定する必要があること。 imageResIdを送信する場合は、画像を一覧表示する必要があります

for (int i=0; i < images.length; i++) { 
       if(images[i] == imageResId) { 
        mViewPager.setCurrentItem(i); 
        break; 
       } 
     } 
+0

私はそのループ全体をコメントアウトしてみましたが、私はまだ同じ動作をします。これは、バグがFooPager内のgetItemメソッドにある可能性があると私に思います。 –

+0

あなたの問題を見つけましたか? –

+0

いいえ、まだありません。私はコードで少し変更しましたが、今度はFooPagerのスライドスクロールで、スクロールを繰り返して同じ画像を繰り返し表示します。 http://pastebin.com/dkq3DFB4。 FooPagerでは、onCreateの位置を取得し、その位置をgetItem内で使用するようにしました(getItemを引数として渡した位置ではなく、スワイプしたときに繰り返される画像です)。この。 –

関連する問題