2014-01-22 75 views
0
在Android的圖片庫

在這裏,我通過擴展PagerAdapter試圖創建使用ViewPager和GridView

import android.content.Context; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 



public class ImageAdapter extends PagerAdapter { 
    private Context mContext; 

    // Keep all Images in array 
    public Integer[] mThumbIds = new Integer[] { 
      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, 
      R.drawable.t, R.drawable.u, 
      R.drawable.v 
    }; 

    // Constructor 
    public ImageAdapter(Context c){ 
     this.mContext = c; 
    } 

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

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view == ((ImageView) object); 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     ImageView imageView = new ImageView(mContext); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
     imageView.setPadding(8, 8, 8, 8); 
     imageView.setImageResource(mThumbIds[position]); 
     ((ViewPager) container).addView(imageView, 0); 
     return imageView; 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     ((ViewPager) container).removeView((ImageView) object); 
    } 
} 

這是工作正常,只有一些多餘的警告創建ImageAdapter上課的時候我得到的錯誤,我現在不在乎。

這裏是碎片類,將顯示圖像存儲在ImageAdapter類

import android.app.Fragment; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.view.ViewGroup; 
import android.widget.GridView; 





public class PhotosFragment extends Fragment { 

    public PhotosFragment(){} 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

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

     GridView gridView = (GridView)rootView.findViewById(R.id.grid_view); 
     gridView.setAdapter(new ImageAdapter(getActivity())); 


     //GridView gridView = (GridView)rootView.findViewById(R.id.grid_view); 

     // Instance of ImageAdapter Class 


     gridView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View v, 
            int position, long id) { 

       // Sending image id to FullScreenActivity 
       Intent i = new Intent (getActivity().getApplicationContext(), FullImageActivity.class); 
       // passing array index 
       i.putExtra("id", position); 
       startActivity(i); 
      } 
     }); 
     return rootView; 
    } 
} 

然後在這裏是FullImageActivity類爲光碎片講座在全屏

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.view.ViewPager; 


public class FullImageActivity extends Activity{ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.full_image); 

     // get intent data 
     Intent i = getIntent(); 

     // Selected image id 
     int position = i.getExtras().getInt("id"); 
     ImageAdapter imageAdapter = new ImageAdapter(this); 

     ViewPager imageView = (ViewPager) findViewById(R.id.full_image_view); 
     imageView.addView(imageAdapter.mThumbIds[position]); 
    } 




} 

我得到錯誤顯示圖像GridView中的setAdapter不能應用於.ImageAdapter

而在FullImageActivity中,ViewGroup中的class-addView不能爲appl滅蠅燈以.Integer

這裏是佈局的xml文件

full_image.xml

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

    <android.support.v4.view.ViewPager android:id="@+id/full_image_view" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"/> 

</LinearLayout> 

fragment_photo

<?xml version="1.0" encoding="utf-8"?> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/grid_view" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:numColumns="auto_fit" 
    android:columnWidth="90dp" 
    android:horizontalSpacing="10dp" 
    android:verticalSpacing="10dp" 
    android:gravity="center" 
    android:stretchMode="columnWidth" > 

</GridView> 

回答

1

至於您收到的錯誤解釋:

GridView的setAdapter method只接受ListAdapters,不接受PagerAdapters。 PagerAdapters旨在與ViewPagers一起使用,因此名稱爲「PagerAdapter」。你可能會希望你的ImageAdapter擴展類似於ArrayAdapter的東西。

與上面的解釋有些相關,您還需要一個適配器來支持您的ViewPager。我真的不確定在調用addView後ViewPager的行爲是什麼,但我懷疑它是你想要的行爲。無論如何,你也給了addView不正確的參數。你從mThumbIds給它一個整數(如錯誤狀態),但它期望view

你可能會從閱讀下面的帖子中受益,如果你真的有你的心臟上使用addView與ViewPager設置:dynamically add and remove view to viewpager

+0

我解決了所有的問題。 謝謝你的時間。 我創建了一個自定義類,以便將圖像放在適當的方形拇指視圖中,並創建了一個可供給ViewPager的自定義ImageAdapter類。 – dw19

+0

如果我的回答幫助你解決了你的問題,你會介意將它標記爲你的問題的答案嗎? – NasaGeek

+0

對不起,這不是我的問題的答案。 我想我的問題首先不清楚。 – dw19