私の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
以内?
私はそのループ全体をコメントアウトしてみましたが、私はまだ同じ動作をします。これは、バグがFooPager内のgetItemメソッドにある可能性があると私に思います。 –
あなたの問題を見つけましたか? –
いいえ、まだありません。私はコードで少し変更しましたが、今度はFooPagerのスライドスクロールで、スクロールを繰り返して同じ画像を繰り返し表示します。 http://pastebin.com/dkq3DFB4。 FooPagerでは、onCreateの位置を取得し、その位置をgetItem内で使用するようにしました(getItemを引数として渡した位置ではなく、スワイプしたときに繰り返される画像です)。この。 –