我的项目有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和所有布局。 感谢您提前帮助解决这个问题。
答案 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。无论如何,我认为你的问题将得到解决。