Android FragmentLayout尚未加载

时间:2016-07-21 15:19:38

标签: java android fragment

我是一个开始android开发的人,可能需要你的帮助。 我正在使用带有Fragments的FrameLayout进行导航。 XML文件是正确的(或者更好的说,它们在IDE中显示正确)。 但加载碎片并不起作用。并且没有任何错误可以帮助我。

唯一的错误是每次加载Fragment时,调试器都说:

  

W / PathParser:点距离太远4.000000596046461

XML是adi Android Studio开始使用的非常基本的XML(带有HelloWorld-Textbox的模板)。我正在使用以下代码加载Fragment:

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, new Dashboard());
fragmentTransaction.commit();

R.id.fragment_container是正确的(首先我没有那么多我可能会感到困惑,其次我检查了两次)。

非常感谢您的时间,我希望对我有所帮助。如果您需要任何进一步的信息,请向他们索取。

添加: 片段(一旦有效就会改变):

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.david_haintz.virtualdatingcoach.Community">

<!-- TODO: Update blank fragment layout -->
<TextView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:text="@string/hello_blank_fragment" />

</FrameLayout>

主:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.david_haintz.virtualdatingcoach.MainActivity">

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" />

</android.support.design.widget.AppBarLayout>

<FrameLayout
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"></FrameLayout>

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    android:layout_margin="@dimen/fab_margin"
    android:src="@android:drawable/ic_dialog_email" />

</android.support.design.widget.CoordinatorLayout>

content_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.david_haintz.virtualdatingcoach.MainActivity"
tools:showIn="@layout/app_bar_main">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!" />
</RelativeLayout>

2 个答案:

答案 0 :(得分:4)

这是Android中图像的常见问题。

有时候,当我们编写一个布局文件时,我们想要预览结果,如果布局有一个ImageView,那么我们也想通过给出xml中的图像资源来查看图像。请注意,当您在图像视图中设置图像资源仅用于预览时,请不要忘记将其删除。如果我们忘记删除它,那么在运行时将加载图像并吸取应用程序内存。

如果图像只加载一次,但如果样本图像在项目布局上,并且我们在回收站视图(listview)中使用布局,那么这似乎没什么问题?样本图像将加载到列表中的每个项目中。只需将其与图像的大小相乘,即应用程序成为内存吸盘的方式。 我犯了这个错误,幸运的是我使用了一个非常大的图像,所以总是提出异常。

以下是预设图像资源的示例

 <ImageView
  android:id="@+id/iv_preview"
  android:layout_width="match_parent"
  android:layout_height="200dp"
  android:layout_below="@+id/tv_title"
  android:adjustViewBounds="true"
  android:scaleType="centerCrop"
  android:src="@drawable/budget_preview"
/>

budget_preview.png是一个非常大的形象。使用默认活动时,我的应用仅使用大约20mb个内存, enter image description here 但是在打开活动后只有3个具有该布局的项目,它跳转到90mb,滚动一点,OOM被提升。 enter image description here 所以不要忘记在完成预览后删除android:src,你可能会保存好记忆。

希望它有用。

使用tools:src代替android:src在Android Studio中获取预览图像,对运行时{0}}

影响为零

资源链接:

http://tools.android.com/tips/layout-designtime-attributes

答案 1 :(得分:2)

如果您在活动中第一次使用此

fragmentTransaction.add(R.id.fragment_container, new Dashboard());

代替

fragmentTransaction.replace(R.id.fragment_container, new Dashboard());  

假如你有一个以上的片段,那么你将在if(或)开关中使用替换片段的情况。
我认为您在使用添加

更改替换时解决了问题
FragmentTransaction fragmentTransaction =getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.fragment_container, new Dashboard());
fragmentTransaction.commit();  

使用此代码