【问题标题】:Problem using ListFragment on Android在 Android 上使用 ListFragment 的问题
【发布时间】:2011-09-02 09:44:24
【问题描述】:

我对 Android 编程非常陌生(我已经编写了大量 PC 应用程序并使用过 Java),但我不知所措。我想创建一个使用片段的应用程序。我想创建 Fragment Programaticaly(正如 Android 开发者页面上的介绍所说)购买我的应用程序不断崩溃,我不知道为什么。

这是我的主要活动的代码:

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

    FragmentManager fmanager = getFragmentManager();
    FragmentTransaction ftransaction = fmanager.beginTransaction();
    FileBrowser fbrowser = new FileBrowser();
    ftransaction.add(R.layout.main,fbrowser, "FileBrowser");       
    ftransaction.commit();

    fbrowser.test();
}

这是 FileBrowser 的代码:

公共类 FileBrowser 扩展 ListFragment {

public void test(){
    System.err.println("Entre a test!!!");
    String[] MyList = {"HOla","Mundo","De","Las","Listas"};
    if (getActivity() == null){
        System.err.println("I get a NULL Activity");
    }
    else{
        System.err.println("No NULL Activity Attempting to Create an Adapter");
        ArrayAdapter<String> aa = new ArrayAdapter<String>(getActivity(), R.layout.file_row, MyList);
    }
    //setListAdapter(new ArrayAdapter<String>(this.getActivity(), R.layout.file_row, MyList));
}

}

我要做的就是在片段中打印字符串列表 MyList。但是我的程序崩溃了,我得到了这个错误:

06-09 19:25:42.920: 错误/AndroidRuntime(26064): java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.ccr/com.ccr.Main}: java.lang.IllegalArgumentException: 无视图找到片段 FileBrowser{4077d558 #0 id=0x7f030001 FileBrowser}

的 id 0x7f030001

感谢您的帮助!

PD:我也收到一条 NULL Activity 消息。


我试过了,还是不行。

这是我的新 xml 文件

 <?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
<FrameLayout 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:id="@+id/flFileBrowser">
    </FrameLayout>        
</LinearLayout>

这是我的代码:

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

    FragmentManager fmanager = getFragmentManager();
    FragmentTransaction ftransaction = fmanager.beginTransaction();
    FileBrowser fbrowser = new FileBrowser();
    System.err.println("I'm about to add the fragment");
    ftransaction.add(R.id.flFileBrowser,fbrowser, "FileBrowser");
    System.err.println("fragment added");
    ftransaction.commit();
    System.err.println("Done");
}

这是我的输出:

06-10 12:23:21.520: WARN/System.err(30826): I'm about to add the fragment
06-10 12:23:21.520: WARN/System.err(30826): fragment added
06-10 12:23:21.520: WARN/System.err(30826): Done
06-10 12:23:21.520: WARN/dalvikvm(30826): threadid=1: thread exiting with uncaught exception (group=0x40131760)
06-10 12:23:21.520: ERROR/AndroidRuntime(30826): FATAL EXCEPTION: main
06-10 12:23:21.520: ERROR/AndroidRuntime(30826): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ccr/com.ccr.Main}: java.lang.IllegalArgumentException: No view found for id 0x7f050000 for fragment FileBrowser{4077d3f0 #0 id=0x7f050000 FileBrowser}
06-10 12:23:21.520: ERROR/AndroidRuntime(30826):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1748)
06-10 12:23:21.520: ERROR/AndroidRuntime(30826):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1764)
06-10 12:23:21.520: ERROR/AndroidRuntime(30826):     at android.app.ActivityThread.access$1500(ActivityThread.java:122)
06-10 12:23:21.520: ERROR/AndroidRuntime(30826):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1002)
06-10 12:23:21.520: ERROR/AndroidRuntime(30826):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-10 12:23:21.520: ERROR/AndroidRuntime(30826):     at android.os.Looper.loop(Looper.java:132)
06-10 12:23:21.520: ERROR/AndroidRuntime(30826):     at android.app.ActivityThread.main(ActivityThread.java:4025)
06-10 12:23:21.520: ERROR/AndroidRuntime(30826):     at java.lang.reflect.Method.invokeNative(Native Method)
06-10 12:23:21.520: ERROR/AndroidRuntime(30826):     at java.lang.reflect.Method.invoke(Method.java:491)
06-10 12:23:21.520: ERROR/AndroidRuntime(30826):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
06-10 12:23:21.520: ERROR/AndroidRuntime(30826):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
06-10 12:23:21.520: ERROR/AndroidRuntime(30826):     at dalvik.system.NativeStart.main(Native Method)
06-10 12:23:21.520: ERROR/AndroidRuntime(30826): Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f050000 for fragment FileBrowser{4077d3f0 #0 id=0x7f050000 FileBrowser}

【问题讨论】:

  • @Dori 非常感谢您修复我的帖子?我对我所做的感到抱歉,但我没有意识到如何更新我的问题,直到为时已晚。你说的对。我确实阅读了常见问题解答,但我找不到任何关于如何添加新代码或用另一个问题解决我的问题的信息。感谢您的帮助!
  • 如果您只是在上面的“android”标签下查看,您应该能够看到一个显示“edit”的文本链接——点击它,编辑并保存。

标签: android


【解决方案1】:

问题出在这里:

ftransaction.add(R.layout.main,fbrowser, "FileBrowser");

第一个参数是活动布局中存在的视图的 id。您正在传递一个布局。例如,假设您在 Activity 的布局中有一个 FrameLayout,使用 id="@+id/container",那么您将调用:

ftransaction.add(R.id.container,fbrowser, "FileBrowser");

http://developer.android.com/reference/android/app/FragmentTransaction.html#add%28int,%20android.app.Fragment,%20java.lang.String%29

【讨论】:

  • 对不起,我不明白。默认主布局是线性布局。拥有 LinearLayout 和 FrameLayout 有什么区别?你仍然会传递一个布局而不是一个视图?在发布问题之前我已经看过参考资料,但我仍然没有意识到问题所在。非常感谢!
  • 你的布局应该有一个容器来放置片段,你想把这个片段放在哪里?这个容器可以是任何你想要的,但通常一个 FrameLayout 会解决它。所以编辑你的布局,在你想保存片段的地方添加一个容器,给那个容器添加一个 id,然后在代码中使用这个 id 来添加片段。
  • 谢谢!我有同样的错误,这就像一个魅力:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
  • 2015-11-25
  • 2015-05-05
相关资源
最近更新 更多