0

我想製作一個選項卡,我必須在gridview中顯示圖片,所以我從庫中的一個製作了正常選項卡,並製作了一個適配器以在我的主活動代碼中顯示圖片。如何在選項卡片段中顯示gridview圖片

class TestAdapter extends FragmentPagerAdapter { 
public TestAdapter (FragmentManager manager) { 
    super(manager); 
} 

@Override 
public Fragment getItem(int i) { 
    Fragment fragment=null; 
    if (i==0){ 
     fragment=new One(); 
    } 
    if (i==1){ 
     fragment=new Two(); 
    } 
    if (i==2){ 
     fragment=new Three(); 
    } 
    return fragment; 
} 

@Override 
public int getCount() { 
    return 3; 
} 
@Override 
public CharSequence getPageTitle(int position) { 
    String title = new String(); 
    if (position==0){ 
     return "tab1"; 
    } 

    if (position==1){ 
     return "tab2"; 
    } 
    if (position==2){ 
     return "tab3"; 
    } 
    return title; 
    } 
} 

我的片段類。

public class One extends Fragment { 
    public Integer [] imageIDs =  { 
    R.drawable.img1, 
    R.drawable.img2, 
    R.drawable.img3, 
    R.drawable.img4, 
    R.drawable.img5, 
    R.drawable.img6, 
    R.drawable.img7, 
    R.drawable.img8, 
    R.drawable.img9, 
    R.drawable.img10 
}; 

public One() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_one,container,false); 
    GridView gridView = (GridView) view.findViewById(R.id.gridView); 
    gridView.setAdapter(new MyAdapter(view.getContext())); // uses the view to get the context instead of getActivity(). 
    return view; 
} 

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

我已經把我的適配器遵循

public class MyAdapter extends BaseAdapter { 
public Integer [] imageIDs =  
{ 
    R.drawable.img1, 
    R.drawable.img2, 
    R.drawable.img3, 
    R.drawable.img4, 
    R.drawable.img5, 
    R.drawable.img6, 
    R.drawable.img7, 
    R.drawable.img8, 
    R.drawable.img9, 
    R.drawable.img10 
}; 

private Context context; 
public MyAdapter(Context c){ 
    context=c; 
} 

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

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

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

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView imageView; 
    if (convertView==null){ 
     imageView =new ImageView(context); 
     imageView.setLayoutParams(new GridView.LayoutParams(85,85)); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageView.setPadding(5,5,5,5); 
    } 
    else { 
     imageView=(ImageView)convertView; 
    } 
    imageView.setImageResource(imageIDs[position]); 

    return imageView; 
    } 
} 

我能夠做一個網格視圖中的活動,但在我使用的MainActivity類申報圖像,但在這裏我得到一個錯誤。 Sso我在適配器中聲明,因爲適配器將調用圖像。這是正確的編譯沒有任何錯誤,但它顯示運行時錯誤 誤差

04-23 10:39:11.950 571-571/? E/Vold: Error reading configuration (No such file or directory)... continuing anyways 

那麼如何解決這個問題,並做了我必須聲明的圖像。

+0

內[網格佈局的可能的複製佈局文件標籤](http://stackoverflow.com/questions/23493527/grid-layout-within-tabs) – miken32

回答

0

在您的片段中定義像下面這樣的圖像,然後根據選擇哪個選項卡,使用網格視圖圖像或文本視圖膨脹片段。

public class CardsFragment extends Fragment { 
    private static final String ARG_POSITION = "position"; 

    private int position; 

    GridView servicesGridView; 

    String[] gridViewString = { 
      "PROTECTION", "Child Registration", "Repatriation", "rsd", "REFERRAL", "Resettlement",}; 

    int[] gridViewImageId = { 
      R.drawable.protection, R.drawable.childregistration, 
      R.drawable.repatriation, R.drawable.rsd, 
      R.drawable.refferal, R.drawable.resettlement,}; 

    //Create a new instance of a fragment at a specific pisition 
    public static CardsFragment newInstance(int position) { 
     CardsFragment f = new CardsFragment(); 
     Bundle b = new Bundle(); 
     b.putInt(ARG_POSITION, position); 
     f.setArguments(b); 
     return f; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     position = getArguments().getInt(ARG_POSITION); 
    } 

    //Populate the fragment with TextViews and grid view images 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     if (position == 1) { 

      View rootView = inflater.inflate(R.layout.activity_gv_services, container, false); 

      // Here we inflate the layout we created above 
      GridView gridView = (GridView) rootView.findViewById(R.id.gv_services); 
      gridView.setAdapter(new GV_ServicesAdapter(getActivity().getApplicationContext(),gridViewString, gridViewImageId)); 
      return rootView; 
     }else { 
      FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, 
        FrameLayout.LayoutParams.MATCH_PARENT); 

      FrameLayout fl = new FrameLayout(getActivity()); 
      fl.setLayoutParams(params); 

      final int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getResources() 
        .getDisplayMetrics()); 
      TextView v = new TextView(getActivity()); 
      params.setMargins(margin, margin, margin, margin); 
      v.setLayoutParams(params); 
      v.setLayoutParams(params); 
      v.setGravity(Gravity.CENTER); 
      v.setBackgroundResource(R.drawable.background_card); 
      v.setText("CARD " + (position + 1)); 

      fl.addView(v); 
      return fl; 
     } 
    } 
} 

哪裏activity_gv_services是承載網格視圖和gv_services佈局文件是網格視圖本身。如圖所示

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<GridView 
android:id="@+id/gv_services" 
    android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:columnWidth="110dp" 
android:gravity="center" 
android:numColumns="auto_fit" /> 

</LinearLayout> 

然後你MyAdapter類應該是這樣的

public class MyAdapter extends BaseAdapter { 
    private Context mContext; 
    private final String[] gridViewString; 
    private final int[] gridViewImageId; 

    public MyAdapter(Context context, String[] gridViewString, int[] gridViewImageId) { 
     mContext = context; 
     this.gridViewImageId = gridViewImageId; 
     this.gridViewString = gridViewString; 
    } 
    @Override 
    public int getCount() { 
     return gridViewString.length; 
    } 

    @Override 
    public Object getItem(int i) { 
     return null; 
    } 

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

    @Override 
    public View getView(int i, View convertView, ViewGroup parent) { 
     View gridViewAndroid; 
     LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if (convertView == null) { 
      gridViewAndroid = new View(mContext); 
      gridViewAndroid = inflater.inflate(R.layout.gv_services_image_text, null); 
      TextView textViewAndroid = (TextView) gridViewAndroid.findViewById(R.id.TxtViewservices); 
      ImageView imageViewAndroid = (ImageView) gridViewAndroid.findViewById(R.id.ImgViewservices); 
      textViewAndroid.setText(gridViewString[i]); 
      imageViewAndroid.setImageResource(gridViewImageId[i]); 
     } else { 
      gridViewAndroid = (View) convertView; 
     } 

     return gridViewAndroid; 
    } 
} 

哪裏gv_services_image_text是包含的ImageView和TextView中所示

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/gv_services_image_text" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:gravity="center_horizontal" 
android:orientation="vertical"> 

<ImageView 
android:id="@+id/ImgViewservices" 
android:layout_width="50dp" 
android:layout_height="50dp" 
android:layout_marginTop="15dp" /> 

<TextView 
android:id="@+id/TxtViewservices" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_marginTop="5dp" 
android:textSize="12sp" /> 

</LinearLayout> 
+0

看看這個stackover流[鏈接](http:// stackoverflow。 COM /問題/ 23493527 /網格佈局內的選項卡)。看起來是同樣的問題,他們已經很好地解釋了它。希望你整理一下 – crakama