【问题标题】:How to convert this Activity to Fragment?如何将此活动转换为片段?
【发布时间】:2014-10-03 18:42:36
【问题描述】:

我正在开发我的第一个应用程序,我的 Activity 中有以下代码,现在我想将其转换为 Fragment(以使用选项卡式 Activity);

public class StatTab1 extends Activity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.stattab1);

        ListView lview = (ListView) findViewById(R.id.listview);
        populateList();
        ListViewAdapter adapter = new ListViewAdapter(this, list);
        lview.setAdapter(adapter);
    }
...

我是这样改代码的:

public class StatTab1 extends Fragment {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ListView lview = (ListView) getView().findViewById(R.id.listview);
        populateList();
        ListViewAdapter adapter = new ListViewAdapter(getActivity(), list);
        lview.setAdapter(adapter);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {             
        View rootView = inflater.inflate(R.layout.stattab1, container, false);
        return rootView;
    }
    ...

我收到此错误:java.lang.RuntimeException: Unable to start activity ComponentInfo java.lang.NullPointerException。

这里是 LogCat:

10-03 21:10:30.915: E/AndroidRuntime(18005): FATAL EXCEPTION: main
10-03 21:10:30.915: E/AndroidRuntime(18005): Process: com.example.myapp, PID: 18005
10-03 21:10:30.915: E/AndroidRuntime(18005): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapp/com.example.myapp.Stats}: java.lang.NullPointerException
10-03 21:10:30.915: E/AndroidRuntime(18005):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2212)
10-03 21:10:30.915: E/AndroidRuntime(18005):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2271)
10-03 21:10:30.915: E/AndroidRuntime(18005):    at android.app.ActivityThread.access$800(ActivityThread.java:144)
10-03 21:10:30.915: E/AndroidRuntime(18005):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
10-03 21:10:30.915: E/AndroidRuntime(18005):    at android.os.Handler.dispatchMessage(Handler.java:102)
10-03 21:10:30.915: E/AndroidRuntime(18005):    at android.os.Looper.loop(Looper.java:136)
10-03 21:10:30.915: E/AndroidRuntime(18005):    at android.app.ActivityThread.main(ActivityThread.java:5146)
10-03 21:10:30.915: E/AndroidRuntime(18005):    at java.lang.reflect.Method.invokeNative(Native Method)
10-03 21:10:30.915: E/AndroidRuntime(18005):    at java.lang.reflect.Method.invoke(Method.java:515)
10-03 21:10:30.915: E/AndroidRuntime(18005):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
10-03 21:10:30.915: E/AndroidRuntime(18005):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
10-03 21:10:30.915: E/AndroidRuntime(18005):    at dalvik.system.NativeStart.main(Native Method)
10-03 21:10:30.915: E/AndroidRuntime(18005): Caused by: java.lang.NullPointerException
10-03 21:10:30.915: E/AndroidRuntime(18005):    at com.example.myapp.StatTab1.onCreate(StatTab1.java:31)
10-03 21:10:30.915: E/AndroidRuntime(18005):    at android.app.Fragment.performCreate(Fragment.java:1678)
10-03 21:10:30.915: E/AndroidRuntime(18005):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:859)
10-03 21:10:30.915: E/AndroidRuntime(18005):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
10-03 21:10:30.915: E/AndroidRuntime(18005):    at android.app.BackStackRecord.run(BackStackRecord.java:684)
10-03 21:10:30.915: E/AndroidRuntime(18005):    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
10-03 21:10:30.915: E/AndroidRuntime(18005):    at android.app.Activity.performStart(Activity.java:5240)
10-03 21:10:30.915: E/AndroidRuntime(18005):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2178)
10-03 21:10:30.915: E/AndroidRuntime(18005):    ... 11 more

【问题讨论】:

  • 您能帮我们粘贴错误信息吗?
  • 我编辑了我的问题,添加了 LogCat 错误消息。谢谢
  • 谢谢。哪一行是 StatTab1.java 第 31 行?看起来这就是错误所在。
  • ListView lview = (ListView) getView().findViewById(R.id.listview);

标签: android android-fragments android-activity android-view findviewbyid


【解决方案1】:

我终于弄清楚了问题并解决了。这可以解决问题:

public class StatTab1 extends Fragment
{    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {             
        View rootView = inflater.inflate(R.layout.stattab1, container, false);

        ListView lview = (ListView) rootView.findViewById(R.id.listview);
        populateList();
        ListViewAdapter adapter = new ListViewAdapter(getActivity(), list);
        lview.setAdapter(adapter);

        return rootView;
    }
...

【讨论】:

  • 酷,我正要建议将其移至 onCreateView。这是一个相关的帖子,这是公认的答案:stackoverflow.com/questions/9488595/…
  • 我自己解决了这个问题 :P 谢谢你的支持 ;)
猜你喜欢
  • 2023-03-23
  • 2018-11-06
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多