在两个片段中填充图像的GridView,选项卡式活动,Viewpager

时间:2017-04-15 18:58:12

标签: android android-fragments gridview tabs android-viewpager

我的项目有2个片段,我想在两个片段中显示gridview的图像。我有带有选项卡式活动的图像适配器和viewpager。我不知道我犯了什么错误。图像没有显示为我想要填充它们的方式。现在我总共有8张图片,其中前5张图片必须在FragmentOne中显示,剩下3张在FragmentTwo中。就是这样。代码如下。帮助我!

// This is my Image Adapter 

 1. public class ImageAdapter extends BaseAdapter {

    public ArrayList<Drawable> allItemsResourceID; private
    LayoutInflater inflater; Context context;

    public ImageAdapter(Context context, ArrayList<Drawable> images) {
        inflater = LayoutInflater.from(context);
        this.context = context;

        allItemsResourceID = images;
        Log.d("Adapter", "Create Image Adapter " + allItemsResourceID.size()); } ImageAdapter(Context context) {
        inflater = LayoutInflater.from(context); }

    @Override public int getCount() {
        return allItemsResourceID.size(); }

    @Override public Object getItem(int position) {
        return allItemsResourceID.get(position); }

    @Override public long getItemId(int position) {
        return position; }

    @Override public View getView(final int position, View convertView,
    ViewGroup parent) {
        final ViewHolder holder;
        View view = convertView;
        if (view == null) {
            view = inflater.inflate(R.layout.image_inflater, parent, false);
            holder = new ViewHolder();
            assert view != null;
            holder.imageView = (ImageView) view.findViewById(R.id.ivImageInflator);
            view.setTag(holder);
        } else {
            holder = (ViewHolder) view.getTag();
        }

        if (!allItemsResourceID.get(position).equals("")) {
            holder.imageView.setImageDrawable(allItemsResourceID.get(position));
        }

        return view; } }



// This is FragmentOne ( Where i want to show 1st 5 images here )

 2. public class FragmentOne extends Fragment { private GridView
    gridView; ArrayList<Drawable> allDrawableImages = new ArrayList<>();
    private TypedArray allImages;


    @Override public View onCreateView(LayoutInflater inflater,
    ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View rootView = inflater.inflate(R.layout.fragment_main, null);
        getAllWidgets(rootView);
        setAdapter();
        return rootView; }

    private void getAllWidgets(View view) {
        gridView = (GridView) view.findViewById(R.id.gridViewFragment);
        allImages = getResources().obtainTypedArray(R.array.all_images); }

    private void setAdapter() {
        for (int i = 0; i < 5; i++) {
            allDrawableImages.add(allImages.getDrawable(i));
        }

        ImageAdapter imageAdapter = new ImageAdapter(MainActivity.getInstance(), allDrawableImages);
        gridView.setAdapter(imageAdapter); } }


// This is FragmentTwo ( I want to show the remaining 3 images here
)

 3. public class FragmentTwo extends Fragment { private GridView
    gridView; ArrayList<Drawable> allDrawableImages = new ArrayList<>();
    private TypedArray allImages;


    @Override public View onCreateView(LayoutInflater inflater,
    ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View rootView = inflater.inflate(R.layout.fragment_main, null);
        getAllWidgets(rootView);
        setAdapter();
        return rootView; }

    private void getAllWidgets(View view) {
        gridView = (GridView) view.findViewById(R.id.gridViewFragment);
        allImages = getResources().obtainTypedArray(R.array.all_images); }

    private void setAdapter() {
        for (int i = 0; i < 3; i++) {
            allDrawableImages.add(allImages.getDrawable(i));
        }

        ImageAdapter imageAdapter = new ImageAdapter(MainActivity.getInstance(), allDrawableImages);
        gridView.setAdapter(imageAdapter); } }

那就是它。除此之外,我的代码适用于ViewPager,MainActivity和所有布局。 感谢您提前帮助解决这个问题。

1 个答案:

答案 0 :(得分:0)

使用此结构。

<强> FragmentOne.java

public class FragmentOne extends Fragment {

private GridView gridView;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_layout, container, false);
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    getAllWidgets(view);
}

private void getAllWidgets(View view) {
    gridView = (GridView) view.findViewById(R.id.grid_view);
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    setAdapter();
}

private void setAdapter() {
    ArrayList<Drawable> allDrawableImages = new ArrayList<>();
    TypedArray typedArray = getResources().obtainTypedArray(R.array.all_images);
    for (int i = 0; i < 5; i++) {
        allDrawableImages.add(typedArray.getDrawable(i));
    }
    typedArray.recycle();
    GridAdapter gridAdapter = new GridAdapter(getActivity(), allDrawableImages);
    gridView.setAdapter(gridAdapter);
}
}

<强> FragmentTwo.java

public class FragmentTwo extends Fragment {

private GridView gridView;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_layout, container, false);
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    getAllWidgets(view);
}

private void getAllWidgets(View view) {
    gridView = (GridView) view.findViewById(R.id.grid_view);
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    setAdapter();
}

@SuppressWarnings("ResourceType")
private void setAdapter() {
    ArrayList<Drawable> allDrawableImages = new ArrayList<>();
    TypedArray typedArray = getResources().obtainTypedArray(R.array.all_images);
    for (int i = 5; i < 8; i++) {
        allDrawableImages.add(typedArray.getDrawable(i));
    }
    typedArray.recycle();
    GridAdapter gridAdapter = new GridAdapter(getActivity(), allDrawableImages);
    gridView.setAdapter(gridAdapter);
}
}

<强> GridAdapter.java

public class GridAdapter extends BaseAdapter {

Context context;
ArrayList<Drawable> images;

public GridAdapter(Context context, ArrayList<Drawable> images) {
    this.context = context;
    this.images = images;
}

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

@Override
public Object getItem(int position) {
    return images.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    GridViewHolder viewHolder;
    if (convertView == null) {
        convertView = LayoutInflater.from(context).inflate(R.layout.item_grid, parent, false);
        viewHolder = new GridViewHolder();
        viewHolder.imageView = (ImageView) convertView.findViewById(R.id.iv_grid_item);
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (GridViewHolder) convertView.getTag();
    }
    viewHolder.imageView.setImageDrawable((Drawable) getItem(position));
    return convertView;
}

private class GridViewHolder {
    ImageView imageView;
}
}

我建议您使用RecyclerView代替GridView。无论如何,我认为你的问题将得到解决。