【问题标题】:Application is getting crash while using gridview in Android在 Android 中使用 gridview 时应用程序崩溃
【发布时间】:2014-05-04 16:10:46
【问题描述】:

在我的应用程序中,我想在导航抽屉的片段中使用 gridView,但我的应用程序正在崩溃。 这是我的代码:

公共类 HomeFragment 扩展 Fragment {

    GridView 网格视图;
    私有字符串 [] 类别HomeGridView;
    私人整数[] 图标={R.drawable.cat_offer_women,R.drawable.cat_offer_men,
            R.drawable.cat_offer_food_and_drink,R.drawable.cat_offer_electronics};
    私有 ArrayList homeGridViewItems;
    私有 HomeGridViewListAdapter 适配器;
    公共 HomeFragment(){}

    @覆盖
    public View onCreateView(LayoutInflater inflater, ViewGroup 容器,
            捆绑保存的InstanceState){
        查看视图 = inflater.inflate(R.layout.fragment_home, container, false);
        在里面();
        返回视图;
    }

    私人无效初始化(){
        // TODO 自动生成的方法存根
        gridView=(GridView) getActivity().findViewById(R.id.homeGridView);
        categoryHomeGridView=getActivity().getResources().getStringArray(R.array.category_array);


        homeGridViewItems=新的 ArrayList();
        homeGridViewItems.add(新 HomeGridViewItem(categoryHomeGridView[0],
                图标[0]));
        homeGridViewItems.add(new HomeGridViewItem(categoryHomeGridView[1],
                图标[1]));
        homeGridViewItems.add(新 HomeGridViewItem(categoryHomeGridView[2],
                图标[2]));
        homeGridViewItems.add(new HomeGridViewItem(categoryHomeGridView[3],
                图标[3]));
    // iconHomeGridView.recycle();

        适配器=新 HomeGridViewListAdapter(getActivity().getApplicationContext()
                ,homeGridViewItems);
        gridView.setAdapter(适配器);

    }
}

这是崩溃日志

03-26 14:50:56.524: E/AndroidRuntime(2355): 致命异常: main 03-26 14:50:56.524: E/AndroidRuntime(2355): java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.example.couponoffer/com.example.couponoffer.MainActivity}: java.lang.NullPointerException 03-26 14:50:56.524: E/AndroidRuntime(2355): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 03-26 14:50:56.524: E/AndroidRuntime(2355): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 03-26 14:50:56.524: E/AndroidRuntime(2355): 在 android.app.ActivityThread.access$600(ActivityThread.java:130) 03-26 14:50:56.524: E/AndroidRuntime(2355): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 03-26 14:50:56.524: E/AndroidRuntime(2355): 在 android.os.Handler.dispatchMessage(Handler.java:99) 03-26 14:50:56.524: E/AndroidRuntime(2355): 在 android.os.Looper.loop(Looper.java:137) 03-26 14:50:56.524: E/AndroidRuntime(2355): 在 android.app.ActivityThread.main(ActivityThread.java:4745) 03-26 14:50:56.524: E/AndroidRuntime(2355): 在 java.lang.reflect.Method.invokeNative(Native Method) 03-26 14:50:56.524: E/AndroidRuntime(2355): 在 java.lang.reflect.Method.invoke(Method.java:511) 03-26 14:50:56.524: E/AndroidRuntime(2355): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 03-26 14:50:56.524: E/AndroidRuntime(2355): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 03-26 14:50:56.524: E/AndroidRuntime(2355): at dalvik.system.NativeStart.main(Native Method) 03-26 14:50:56.524: E/AndroidRuntime(2355): 由: java.lang.NullPointerException 引起 03-26 14:50:56.524: E/AndroidRuntime(2355): 在 Fragments.HomeFragment.init(HomeFragment.java:57) 03-26 14:50:56.524: E/AndroidRuntime(2355): 在 Fragments.HomeFragment.onCreateView(HomeFragment.java:34) 03-26 14:50:56.524: E/AndroidRuntime(2355): 在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:829) 03-26 14:50:56.524: E/AndroidRuntime(2355): 在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1035) 03-26 14:50:56.524: E/AndroidRuntime(2355): 在 android.app.BackStackRecord.run(BackStackRecord.java:635) 03-26 14:50:56.524: E/AndroidRuntime(2355): 在 android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1397) 03-26 14:50:56.524: E/AndroidRuntime(2355): 在 android.app.Activity.performStart(Activity.java:5017) 03-26 14:50:56.524: E/AndroidRuntime(2355): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2032) 03-26 14:50:56.524: E/AndroidRuntime(2355): ... 11 更多

【问题讨论】:

    标签: android


    【解决方案1】:

    将这一行 gridView=(GridView) getActivity().findViewById(R.id.homeGridView); 放在 onCreate 中并像这样 gridView=(GridView) view.findViewById(R.id.homeGridView); 这样做,因为您的 gridview 是您的视图的一部分。或者将 View 视图传递给 init();

    像这样:

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_home, container, false);
            init(view);
            return view;
        }
    
    private void init(View rootView) {
            // TODO Auto-generated method stub
            gridView=(GridView) rootView.findViewById(R.id.homeGridView);
            categoryHomeGridView=getActivity().getResources().getStringArray(R.array.category_array);
    
    
            homeGridViewItems=new ArrayList();
            homeGridViewItems.add(new HomeGridViewItem(categoryHomeGridView[0],
                    icon[0]));
            homeGridViewItems.add(new HomeGridViewItem(categoryHomeGridView[1],
                    icon[1]));
            homeGridViewItems.add(new HomeGridViewItem(categoryHomeGridView[2],
                    icon[2]));
            homeGridViewItems.add(new HomeGridViewItem(categoryHomeGridView[3],
                    icon[3]));
        //  iconHomeGridView.recycle(); 
    
            adapter=new HomeGridViewListAdapter(getActivity().getApplicationContext()
                    ,homeGridViewItems);
            gridView.setAdapter(adapter); 
    
        }
    

    【讨论】:

      【解决方案2】:

      gridView大概属于fragment布局

      所以你需要改变这个

       gridView=(GridView) getActivity().findViewById(R.id.homeGridView);
      

      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
              Bundle savedInstanceState) {
       View view = inflater.inflate(R.layout.fragment_home, container, false)
       gridView=(GridView) view.findViewById(R.id.homeGridView);
      

      【讨论】:

        【解决方案3】:

        改变这个:

        gridView=(GridView) getActivity().findViewById(R.id.homeGridView);
        

        到这里:

        View view = inflater.inflate(R.layout.fragment_home, container, false);
        gridView=(GridView) view .findViewById(R.id.homeGridView);
        

        【讨论】:

          猜你喜欢
          • 2016-08-05
          • 1970-01-01
          • 1970-01-01
          • 2022-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-04-22
          相关资源
          最近更新 更多