【问题标题】:Spinner works in Activity but not FragmentSpinner 适用于 Activity 但不适用于 Fragment
【发布时间】:2015-01-20 04:35:20
【问题描述】:
01-20 10:39:59.721: D/AndroidRuntime(2062): Shutting down VM
01-20 10:39:59.721: W/dalvikvm(2062): threadid=1: thread exiting with uncaught exception (group=0x41632d88)
01-20 10:39:59.731: E/AndroidRuntime(2062): FATAL EXCEPTION: main
01-20 10:39:59.731: E/AndroidRuntime(2062): Process: com.example.mysqltest, PID: 2062
01-20 10:39:59.731: E/AndroidRuntime(2062): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mysqltest/com.example.jobtracker.ReadComments}: java.lang.NullPointerException
01-20 10:39:59.731: E/AndroidRuntime(2062):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2237)
01-20 10:39:59.731: E/AndroidRuntime(2062):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2286)
01-20 10:39:59.731: E/AndroidRuntime(2062):     at android.app.ActivityThread.access$800(ActivityThread.java:144)
01-20 10:39:59.731: E/AndroidRuntime(2062):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1246)
01-20 10:39:59.731: E/AndroidRuntime(2062):     at android.os.Handler.dispatchMessage(Handler.java:102)
01-20 10:39:59.731: E/AndroidRuntime(2062):     at android.os.Looper.loop(Looper.java:212)
01-20 10:39:59.731: E/AndroidRuntime(2062):     at android.app.ActivityThread.main(ActivityThread.java:5135)
01-20 10:39:59.731: E/AndroidRuntime(2062):     at java.lang.reflect.Method.invokeNative(Native Method)
01-20 10:39:59.731: E/AndroidRuntime(2062):     at java.lang.reflect.Method.invoke(Method.java:515)
01-20 10:39:59.731: E/AndroidRuntime(2062):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
01-20 10:39:59.731: E/AndroidRuntime(2062):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
01-20 10:39:59.731: E/AndroidRuntime(2062):     at dalvik.system.NativeStart.main(Native Method)
01-20 10:39:59.731: E/AndroidRuntime(2062): Caused by: java.lang.NullPointerException
01-20 10:39:59.731: E/AndroidRuntime(2062):     at com.example.jobtracker.JobqueueFragment.onCreateView(JobqueueFragment.java:72)
01-20 10:39:59.731: E/AndroidRuntime(2062):     at android.app.Fragment.performCreateView(Fragment.java:1700)
01-20 10:39:59.731: E/AndroidRuntime(2062):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:894)
01-20 10:39:59.731: E/AndroidRuntime(2062):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1066)
01-20 10:39:59.731: E/AndroidRuntime(2062):     at android.app.BackStackRecord.run(BackStackRecord.java:684)
01-20 10:39:59.731: E/AndroidRuntime(2062):     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1455)
01-20 10:39:59.731: E/AndroidRuntime(2062):     at android.app.Activity.performStart(Activity.java:5240)
01-20 10:39:59.731: E/AndroidRuntime(2062):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2210)
01-20 10:39:59.731: E/AndroidRuntime(2062):     ... 11 more

【问题讨论】:

  • 请贴出com.example.jobtracker.JobqueueFragment.onCreateView(JobqueueFragment.java:72)类的代码和第72行。
  • 它不允许我添加完整的代码..我可以得到你的邮件ID..这样我就可以给你发送完整的代码
  • 您可以在此处发布您的完整代码--pastie.org 并分享您问题的链接。 @user3479916

标签: android android-layout listview android-intent android-fragments


【解决方案1】:

替换这一行

Spinner spinner = (Spinner) getActivity().findViewById(R.id.spinner_status);

通过这个

Spinner spinner = (Spinner) inflate.findViewById(R.id.spinner_status);

【讨论】:

  • 01-20 10:27:22.923: E/AndroidRuntime(32454): 进程: com.example.mysqltest, PID: 32454 01-20 10:27:22.923: E/AndroidRuntime(32454) : java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.example.mysqltest/com.example.jobtracker.ReadComments}: java.lang.NullPointerException 01-20 10:27:22.923: E/AndroidRuntime(32454): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2237) 01-20 10:27:22.923: E/AndroidRuntime(32454): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2286)
  • 在您的问题中发布完整的 logcat 错误。 @user3479916
【解决方案2】:

尝试如下改变:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View inflate = inflater.inflate(R.layout.fragment_jobqueue, container, false);

    // ONE CHANGE HERE
    ctx = getActivity().getApplicationContext(); 

    mainListView = (ListView) inflate.findViewById(R.id.list);

    //SECOND CHANGE HERE
    Spinner spinner = (Spinner) inflate.findViewById(R.id.spinner_status);

    // Create an ArrayAdapter using the string array and a default spinner layout
    ArrayAdapter<CharSequence> adapters = ArrayAdapter.createFromResource(ctx,
            R.array.spinner_item, android.R.layout.simple_spinner_item);
    // Specify the layout to use when the list of choices appears
    adapters.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    // Apply the adapter to the spinner
    spinner.setAdapter(adapters);

    new JobQueue().execute();
    return inflate;
}

【讨论】:

    【解决方案3】:

    使用此代码

        Spinner spinner = (Spinner) inflate.findViewById(R.id.spinner_status);
    
        ArrayAdapter<CharSequence> adapters = ArrayAdapter.createFromResource(getActivity(),
                        R.array.spinner_item, android.R.layout.simple_spinner_item);
     adapters.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    

    现在您的问题将得到解决。 有任何疑问在评论中提问

    【讨论】:

    • 01-20 10:27:22.923: E/AndroidRuntime(32454): 进程: com.example.mysqltest, PID: 32454 01-20 10:27:22.923: E/AndroidRuntime(32454) : java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.example.mysqltest/com.example.jobtracker.ReadComments}: java.lang.NullPointerException 01-20 10:27:22.923: E/AndroidRuntime(32454): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2237) 01-20 10:27:22.923: E/AndroidRuntime(32454): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2286) –
    【解决方案4】:

    如下修改你的代码:

    首先更改您的ctx 如下:

     ctx=JobqueueFragment.this.getActivity();
    

    而不是

    ctx = inflater.getContext();
    

    您的布局fragment_jobqueue 不包含您的Spinner,因此您不能在片段类的Spinner 中直接绑定数据。那是您实际遇到空指针错误的地方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多