2017-04-15 12 views
0

私のプロジェクトには2つのフラグメントがあります。両方のフラグメントにgridviewのイメージを表示します。タブ付きのアクティビティを持つ画像アダプタとビューページがあります。私はどこで間違いを犯しているのか分かりません。画像は、私がそれらを取り込む方法と同じようには見えません。今私は最初の5つのイメージがFragmentOneに表示され、残りの3つがFragmentTwoに表示されなければならない8つのイメージがあります。それでおしまい。コードは以下のとおりです。助けて!2つのフラグメント、タブ付きアクティビティ、ビューページャーでイメージのGridViewを挿入する

// 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

この構造を使用してください。

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; 
} 
} 

GridViewの代わりにRecyclerViewを使うことをお勧めします。とにかくあなたの問題は解決されると思います。

+0

ありがとう、私はそれをテストします – Rajashekar

+0

これは素晴らしいです! – Rajashekar

関連する問題