开发图库视图时 setAdapter 出错 [重复]

Posted

技术标签:

【中文标题】开发图库视图时 setAdapter 出错 [重复]【英文标题】:Error on setAdapter when developing Gallery view [duplicate] 【发布时间】:2017-01-20 04:13:11 【问题描述】:

基本上,我正在尝试创建一个具有图像图库视图的应用程序。我使用网格视图做了画廊视图。使用片段,而不是活动。但是打开画廊会话时应用程序崩溃。这是代码:

XML 文件(fragment_gallery.xml):

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

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

    <GridView
        android:layout_
        android:layout_
        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;
    


适配器类(Image Adapter.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)

【问题讨论】:

错误是什么? @phpdroid:我附上了错误日志。请检查 第二个答案 - 使用膨胀视图,而不是 container.findViewById 【参考方案1】:

改变

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

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

在使用片段时使用 getActivity() 代替 this

希望对你有帮助

【讨论】:

【参考方案2】:

在片段文件中你应该改变

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

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

【讨论】:

【参考方案3】:

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

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

但是,在使用 getActivity() 时要小心,因为有时它会返回 null。有关这方面的更多信息,请参阅此主题:android get activity returns null

【讨论】:

gridView 为空。这解决了一个不同的问题 @cricket_007 是的,我知道。不过,还有其他人已经解决了这个问题。是的,这是线程的主要问题,它导致了立即崩溃;但是,我也注意到了这一点,并且由于其他人已经将主要问题提请 OP 关注,我想我会解决这个可预见的问题。对不起,我应该更清楚。

以上是关于开发图库视图时 setAdapter 出错 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Android - 片段中的 setAdapter [重复]

垂直网格视图中的重复卡片

当我在 swift 3 中从图库中获取照片时,为啥收藏视图为空?

XC测试。检测访问图库警报视图

Android:如何在设置图像视图时检测从图库中选择的图像方向(纵向或横向)?

图库图像视图中的图像选择器消失了