在Android上使用ListFragment问题 [英] Problem using ListFragment on Android

查看:128
本文介绍了在Android上使用ListFragment问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Android中的编程(我已经设定了广泛的PC应用程序和使用的Java)很新,我不知所措。我想创建一个使用碎片一个应用程序。我要创建的片段Programaticaly(引进Android开发者页面上说)买我的应用程序保持崩溃,我不知道,为什么。

下面是code为我的主要活动:

 公共无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.main);    FragmentManager fmanager = getFragmentManager();
    FragmentTransaction ftransaction = fmanager.beginTransaction();
    FileBrowser fbrowser =新FileBrowser();
    ftransaction.add(R.layout.main,fbrowserFileBrowser);
    ftransaction.commit();    fbrowser.test();
}

这里是code为FileBrowser:

公共类FileBrowser扩展ListFragment {

 公共无效测试(){
    通信System.err.println(恩特雷里奥斯测试!!!);
    的String [] = MYLIST {HOLA,世界报,德,拉斯维加斯,Listas};
    如果(getActivity()== NULL){
        通信System.err.println(我得到一个空活动);
    }
    其他{
        通信System.err.println(无空活动试图创建一个适配器);
        ArrayAdapter<串GT; AA =新ArrayAdapter<串GT;(getActivity(),R.layout.file_row,MYLIST);
    }
    // setListAdapter(新ArrayAdapter<串GT;(this.getActivity(),R.layout.file_row,MYLIST));
}

}

我只婉做的,开始是打印字符串列表MYLIST的片段。不过,我的程序崩溃,我得到这个错误:

19 06-09:25:42.920:ERROR / AndroidRuntime(26064):了java.lang.RuntimeException:无法启动活动ComponentInfo {com.ccr / com.ccr.Main}:java.lang.IllegalArgumentException异常:无景观发现编号为0x7f030001片段FileBrowser {4077d558#0 ID = 0x7f030001 FileBrowser}

感谢您的帮助!

PD:我得到了我得到一个空的活动消息还


我已经试过了,它也不能工作。

这是我的新的XML文件

 <?XML版本=1.0编码=UTF-8&GT?;
  < LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:方向=垂直
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =FILL_PARENT>
<的FrameLayout
    机器人:layout_height =WRAP_CONTENT
    机器人:layout_width =WRAP_CONTENT
    机器人:ID =@ + ID / flFileBrowser>
    < /&的FrameLayout GT;
< / LinearLayout中>

这是我的code读取:

 公共无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.main);    FragmentManager fmanager = getFragmentManager();
    FragmentTransaction ftransaction = fmanager.beginTransaction();
    FileBrowser fbrowser =新FileBrowser();
    通信System.err.println(我要补充片段);
    ftransaction.add(R.id.flFileBrowser,fbrowserFileBrowser);
    通信System.err.println(片段添加);
    ftransaction.commit();
    通信System.err.println(完成);
}

这是我的输出:

 一十二月6日至10日:23:21.520:WARN / System.err的(30826):我对添加的片段
12月6日至一十日:23:21.520:WARN / System.err的(30826):添加片段
12月6日至一十日:23:21.520:WARN / System.err的(30826):已完成
12月6日至一十日:23:21.520:WARN / dalvikvm(30826):主题ID = 1:螺纹未捕获的异常(组= 0x40131760)退出
12月6日至一十日:23:21.520:ERROR / AndroidRuntime(30826):致命异常:主要
12月6日至一十日:23:21.520:ERROR / AndroidRuntime(30826):了java.lang.RuntimeException:无法启动活动ComponentInfo {com.ccr / com.ccr.Main}:java.lang.IllegalArgumentException异常:没有查看发现ID 0x7f050000的片段FileBrowser {4077d3f0#0 ID = 0x7f050000 FileBrowser}
12月6日至一十日:23:21.520:ERROR / AndroidRuntime(30826):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1748)
12月6日至一十日:23:21.520:ERROR / AndroidRuntime(30826):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1764)
12月6日至一十日:23:21.520:ERROR / AndroidRuntime(30826):在android.app.ActivityThread.access $ 1500(ActivityThread.java:122)
12月6日至一十日:23:21.520:ERROR / AndroidRuntime(30826):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1002)
12月6日至一十日:23:21.520:ERROR / AndroidRuntime(30826):在android.os.Handler.dispatchMessage(Handler.java:99)
12月6日至一十日:23:21.520:ERROR / AndroidRuntime(30826):在android.os.Looper.loop(Looper.java:132)
12月6日至一十日:23:21.520:ERROR / AndroidRuntime(30826):在android.app.ActivityThread.main(ActivityThread.java:4025)
12月6日至一十日:23:21.520:ERROR / AndroidRuntime(30826):在java.lang.reflect.Method.invokeNative(本机方法)
12月6日至一十日:23:21.520:ERROR / AndroidRuntime(30826):在java.lang.reflect.Method.invoke(Method.java:491)
12月6日至一十日:23:21.520:ERROR / AndroidRuntime(30826):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:841)
12月6日至一十日:23:21.520:ERROR / AndroidRuntime(30826):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
12月6日至一十日:23:21.520:ERROR / AndroidRuntime(30826):在dalvik.system.NativeStart.main(本机方法)
12月6日至一十日:23:21.520:ERROR / AndroidRuntime(30826):java.lang.IllegalArgumentException异常:产生的原因未找到ID为0x7f050000鉴于片段FileBrowser {4077d3f0#0 ID = 0x7f050000 FileBrowser}


解决方案

该问题是在这里:

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

的第一个参数是期望在活动的布局的视图present的一个id。您passsing的布局。因此,例如,假设你在活动的布局的id的FrameLayout =@ + ID /容器那么你将拨打:

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

<一个href=\"http://developer.android.com/reference/android/app/FragmentTransaction.html#add%28int,%20android.app.Fragment,%20java.lang.String%29\">http://developer.android.com/reference/android/app/FragmentTransaction.html#add%28int,%20android.app.Fragment,%20java.lang.String%29

I'm very new at programming in Android (I have programmed extensively PC applications and used Java) and I'm at a loss. I want to create a application that uses fragments. I want to create the Fragment Programaticaly (as the introduction says on Android Developer page) buy my application keeps crashing and I have no Idea as to why.

Here is the code for my main activity:

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();
}

And here is the code for FileBrowser:

public class FileBrowser extends 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));
}

}

All I wan to do to start is to print the string list MyList in the fragment. However I the program crashes and I get this error:

06-09 19:25:42.920: ERROR/AndroidRuntime(26064): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ccr/com.ccr.Main}: java.lang.IllegalArgumentException: No view found for id 0x7f030001 for fragment FileBrowser{4077d558 #0 id=0x7f030001 FileBrowser}

Thanks for any help!

PD: I get the I get a NULL Activity Message also.


I've tried that and it did not work either.

This is my new xml file

 <?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>

And this is what my code reads:

  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");
}

This was my output:

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}

解决方案

The problem is here:

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

The first parameter is expecting an id of a view present in the layout of the activity. You are passsing a layout. So for example let's say you have a FrameLayout in the layout of the activity with id="@+id/container" then you would call:

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

这篇关于在Android上使用ListFragment问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆