Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果在横向模式下启动,则在设置自定义适配器时获取nullpointerexception_Android_Gridview - Fatal编程技术网

Android 如果在横向模式下启动,则在设置自定义适配器时获取nullpointerexception

Android 如果在横向模式下启动,则在设置自定义适配器时获取nullpointerexception,android,gridview,Android,Gridview,我在项目中遇到了一些奇怪的问题,在横向模式下启动时,它会触发空指针适配器。现在的问题是,我有一个gridview,因为它是我唯一的最佳选择。现在,适配器非常简单: public class ActionsAdapter extends BaseAdapter { Context context; public ActionsAdapter(Context context){ this.context = context; } @Overrid

我在项目中遇到了一些奇怪的问题,在横向模式下启动时,它会触发空指针适配器。现在的问题是,我有一个gridview,因为它是我唯一的最佳选择。现在,适配器非常简单:

public class ActionsAdapter extends BaseAdapter {

    Context context;

    public ActionsAdapter(Context context){
        this.context = context;
    }

    @Override
    public int getCount() {
        return 2;
    }

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

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

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View  rowView;
        if(i==0) {
            rowView = inflater.inflate(R.layout.button1, viewGroup, false);
            Button button1 = (Button) rowView.findViewById(R.id.btn_1);
            button1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    showPage();
                }
            });
        }else{
            rowView = inflater.inflate(R.layout.button2, viewGroup, false);

        }


        return rowView;


    }

private void showPage(){
        //TODO show page
    }
现在,我所做的只是以我认为自然的方式将这个适配器设置到我的gridview中:

actions.setAdapter(new ActionsAdapter(getActivity()));
现在,这在纵向模式下非常有效,但是如果在landscapemode上启动,它将返回一个null指针exeption,它将在设置适配器时指向上面的代码

以下是完整日志:

FATAL EXCEPTION: main
    Process: com.gmanmi.news.papalvisit2014.mobile, PID: 18353
    java.lang.NullPointerException
            at com.kahel.sample.fragments.Testfragment.onCreateView(Testfragment.java:93)
            at android.support.v4.app.Fragment.performCreateView(Fragment.java:1504)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:942)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1121)
            at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
            at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1484)
            at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:482)
            at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
            at android.support.v4.view.ViewPager.populate(ViewPager.java:1073)
            at android.support.v4.view.ViewPager.populate(ViewPager.java:919)
            at android.support.v4.view.ViewPager$3.run(ViewPager.java:249)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
            at android.view.Choreographer.doCallbacks(Choreographer.java:574)
            at android.view.Choreographer.doFrame(Choreographer.java:543)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5105)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
            at dalvik.system.NativeStart.main(Native Method)
以下是onCreateView:

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

        actions = (GridView) view.findViewById(R.id.grid_actions);
        actions.setAdapter(new ActionsAdapter(getActivity()));
 actions.setOnItemClickListener(new AdapterView.OnItemClickListener() {
enter code here
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            if(position==1){
                Toast.makeText(getActivity(), "Show action", Toast.LENGTH_SHORT).show();
            }
        }
    });

    return view;
}
@覆盖
创建视图上的公共视图(布局、充气机、最终视图组容器、,
最终捆绑包保存状态(STANCESTATE){
最终视图=充气机。充气(R.layout.fragment\u grid\u动作,容器,错误);
actions=(GridView)view.findviewbyd(R.id.grid\u actions);
actions.setAdapter(新的ActionsAdapter(getActivity());
actions.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
在这里输入代码
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
如果(位置==1){
Toast.makeText(getActivity(),“Show action”,Toast.LENGTH_SHORT.Show();
}
}
});
返回视图;
}

您的问题在于在
onCreateView
中调用
getActivity
。您无法安全地执行此操作,因为无法保证此时已完全创建活动,因此NPE。将调用移动到
setAdapter
,并将后续调用移动到
onActivityCreated


也许可以帮助您更好地理解如何处理此问题。

您的问题是在
onCreateView
中调用
getActivity
。您无法安全地执行此操作,因为无法保证此时已完全创建活动,因此NPE。将调用移动到
setAdapter
,并将后续调用移动到
onActivityCreated


也许可以帮助您更好地理解如何处理此问题。

您的问题是在
onCreateView
中调用
getActivity
。您无法安全地执行此操作,因为无法保证此时已完全创建活动,因此NPE。将调用移动到
setAdapter
,并将后续调用移动到
onActivityCreated


也许可以帮助您更好地理解如何处理此问题。

您的问题是在
onCreateView
中调用
getActivity
。您无法安全地执行此操作,因为无法保证此时已完全创建活动,因此NPE。将调用移动到
setAdapter
,并将后续调用移动到
onActivityCreated


也许可以帮助您更好地理解如何处理此问题。

@2Dee是正确的。当您在
onCreateView
中使用
getActivity
时,您无法知道此活动是否在此时创建


请看他的答案,以获得更精确的答案

@2Dee是正确的当您在
onCreateView
中使用
getActivity
时,您无法知道此活动是否在此时创建


请看他的答案,以获得更精确的答案

@2Dee是正确的当您在
onCreateView
中使用
getActivity
时,您无法知道此活动是否在此时创建


请看他的答案,以获得更精确的答案

@2Dee是正确的当您在
onCreateView
中使用
getActivity
时,您无法知道此活动是否在此时创建


请看他的答案,以获得更精确的答案

您可以发布Testfragment的onCreateView吗?发布了onCreateView,但我需要截断某些部分(设置视图),我确定这不是错误的原因。可能是view.findViewById(R.id.grid_actions)返回空值。如果您有一个单独的xml用于横向布局,那么请检查纵向布局和横向布局中的grid_actions id是否相同。我只有一个xml布局。我还认为该视图返回null,但不知道为什么它只在横向启动时才会发生。好的,在检查它之后,我已经指出了问题的真正原因,因为以前我有一个单独的横向xml布局,我已经删除了它,但还没有清理它,并创建了一个null指针。在第一次清洁时,我不确定为什么它不起作用,但在第二次尝试时,它就起作用了。谢谢@samgak的想法。你能发布Testfragment的onCreateView吗?发布了onCreateView,尽管我需要截断某些部分(设置视图),我确定这不是错误的原因。可能是view.findViewById(R.id.grid_actions)返回空值。如果您有一个单独的xml用于横向布局,那么请检查纵向布局和横向布局中的grid_actions id是否相同。我只有一个xml布局。我还认为该视图返回null,但不知道为什么它只在横向启动时才会发生。好的,在检查它之后,我已经指出了问题的真正原因,因为以前我有一个单独的横向xml布局,我已经删除了它,但还没有清理它,并创建了一个null指针。在第一次清洁时,我不确定为什么它不起作用,但在第二次尝试时,它就起作用了。谢谢@samgak的想法。你能发布Testfragment的onCreateView吗?发布了onCreateView,尽管我需要截断某些部分(设置视图),我确定这不是错误的原因。可能是view.findViewById(R.id.grid_actions)返回空值。如果您有一个单独的xml用于横向布局,那么请检查纵向布局和横向布局中的grid_actions id是否相同。我只有一个xml布局。我还认为视图返回null,但不知道为什么它只在横向启动时发生