2016-09-12 31 views
2

基本上,我試圖創建一個具有圖像庫視圖的應用程序。我使用網格視圖做了圖庫視圖。片段被使用,而不是一個活動。但是,當打開畫廊會話時,應用程序會崩潰。下面是代碼:開發Gallery視圖時出現setAdapter錯誤

XML文件(fragment_gallery.xml):

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="5dp" 
    tools:context="com.example.tonymathew.eliteenglishclub.gallery"> 

    <!-- TODO: Update blank fragment layout --> 

    <GridView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/gridView" 
     android:columnWidth="100dp" 
     android:stretchMode="columnWidth" 

     android:numColumns="auto_fit" 
     android:horizontalSpacing="5dp" 
     android:verticalSpacing="5dp" 
     android:layout_gravity="center" /> 

</FrameLayout> 

片斷文件(gallery.java):

public class gallery extends Fragment { 
    GridView gridView; 

    public gallery() { 

    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_gallery, container, false); 

     gridView = (GridView) container.findViewById(R.id.gridView); 

     gridView.setAdapter(new ImageAdapter(this)); 

     return view; 
    } 

} 

適配器類別(圖像適配器。 java):

public class ImageAdapter extends BaseAdapter{ 
    private Context context; 

    public Integer[] images = { 
      R.drawable.about, R.drawable.gallery, 
      R.drawable.home, R.drawable.invitation, 
      R.drawable.register, R.drawable.membership, 
      R.drawable.about, R.drawable.gallery, 
      R.drawable.home, R.drawable.invitation, 
      R.drawable.register, R.drawable.membership, 
      R.drawable.about, R.drawable.gallery, 
      R.drawable.home, R.drawable.invitation, 
      R.drawable.register, R.drawable.membership, 
      R.drawable.about, R.drawable.gallery 
    }; 

    public ImageAdapter(Context c){ 
     context = c; 
    } 

    public ImageAdapter(gallery g){ 

    } 

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

    @Override 
    public Object getItem(int i) { 
     return images[i]; 
    } 

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

    @Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 
     ImageView imageView = new ImageView(context); 
     imageView.setImageResource(images[i]); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
     imageView.setLayoutParams(new GridView.LayoutParams(240,240)); 
     return imageView; 
    } 
} 

這是錯誤,我得到:

09-12 22:25:45.359 29157-29157/com.example.tonymathew.eliteenglishclub E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.example.tonymathew.eliteenglishclub, PID: 29157 
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.GridView.setAdapter(android.widget.ListAdapter)' on a null object reference 
at com.example.tonymathew.eliteenglishclub.gallery.onCreateView(gallery.java:28) 
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2080) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1108) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1290) 
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801) 
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1677) 
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:536) 
at android.os.Handler.handleCallback(Handler.java:746) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5443) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
+1

什麼是錯誤? – phpdroid

+0

@phpdroid:我附上了錯誤日誌。請檢查 –

+0

第二個答案 - 使用充氣的視圖,而不是'container.findViewById' –

回答

1

在片段文件,你應該從

的GridView =(GridView控件)container.findViewById(R.id.gridView)變化;

GRIDVIEW =(GridView的)view.findViewById(R.id.gridView);

3

變化

gridView = (GridView) container.findViewById(R.id.gridView); 

與地方的

gridView = (GridView) view.findViewById(R.id.gridView); 

而且使用getActivity()使用片段

希望的時候,這將幫助你

0

在你的片段活動,你需要使用getActivity():

gridView.setAdapter(new ImageAdapter(getActivity())) 

使用getActivity()的時候,但是要小心,因爲有時候它會返回null。欲瞭解更多信息,請參閱此主題:android get activity returns null

+0

'gridView'爲空。這解決了一個不同的問題 –

+0

@ cricket_007是的,我知道。還有其他人已經解決了這個問題。是的,這是線程的主要問題,並導致立即崩潰;但是,我也注意到了這一點,既然其他人已經將主要問題帶給了OP的關注,我想我會解決這個可怕的問題。對不起,我應該更清楚了。 –