Java 开发库视图时setAdapter出错
基本上,我试图创建一个应用程序,其中有一个画廊的图像视图。我使用网格视图进行了画廊视图。使用的是片段,而不是活动。但当打开gallery会话时,应用程序崩溃。代码如下: XML文件(fragment\u gallery.XML):Java 开发库视图时setAdapter出错,java,android,android-fragments,nullpointerexception,Java,Android,Android Fragments,Nullpointerexception,基本上,我试图创建一个应用程序,其中有一个画廊的图像视图。我使用网格视图进行了画廊视图。使用的是片段,而不是活动。但当打开gallery会话时,应用程序崩溃。代码如下: XML文件(fragment\u gallery.XML): <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" andr
<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>
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;
}
}
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)
适配器类(Image Adapter.java):
<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>
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;
}
}
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)
这是我得到的错误:
<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>
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;
}
}
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)
在片段文件中,您应该从 gridView=(gridView)container.findViewById(R.id.gridView) 到 gridView=(gridView)view.findViewById(R.id.gridView) 改变
gridView = (GridView) container.findViewById(R.id.gridView);
与
并在使用片段时使用getActivity()代替此
希望这将对您的片段活动有所帮助,您需要使用getActivity():
但是,在使用getActivity()时要小心,因为有时它会返回null。有关这方面的更多信息,请参阅此线程:错误是什么?@phpdroid:我已附加了错误日志。请检查第二个答案-使用充气视图,而不是
容器。findViewById
网格视图为空。这解决了一个不同的问题problem@cricket_007是的,我知道。但也有其他人已经解决了这个问题。是的,这是线程的主要问题,它立即导致崩溃;但是,我也注意到了这一点,因为其他人已经将主要问题提请老年退休金计划注意,我想我会解决这个可以预见的问题。对不起,我应该说得更清楚些。