开发Gallery视图时设置适配器时发生错误。

15 浏览
0 Comments

开发Gallery视图时设置适配器时发生错误。

此问题已有答案

在Fragment中使用findViewById()

findViewByID返回null

基本上,我正在尝试创建一个具有图像的画廊视图的应用程序。我使用了网格视图来创建画廊视图。使用了Fragment而不是Activity。但是,当打开画廊会话时,应用程序会崩溃。以下是代码:

XML文件(fragment_gallery.xml):

    
    

Fragment文件(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;
    }
}

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

admin 更改状态以发布 2023年5月24日
0
0 Comments

在 Fragment 文件中,你应该将以下代码从:

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

改为:

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

0
0 Comments

更换

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

使用

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

当使用片段时,使用getActivity()代替this

希望这能帮助你

0