【问题标题】:Multiple fragments inside LinearLayoutLinearLayout 内的多个片段
【发布时间】:2017-02-10 13:34:37
【问题描述】:

尝试使用以下 XML 在 LinearLayout 中放置两个片段 -

MainActivity:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
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"
tools:context="com.frag.myfragmentapplication.MainActivity">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/mainTV"
    android:text="Hello World!" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <fragment
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:name="com.frag.myfragmentapplication.fragTwo"
        tools:layout="@layout/fragment2" />
    <fragment
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:name="com.frag.myfragmentapplication.fragOne"
        tools:layout="@layout/fragment1" />
    </LinearLayout>
</RelativeLayout>

MainActivity 代码

 public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        }
    }

在设计模式下它看起来不错,但是当我运行这个测试应用程序时,我收到以下错误 -

java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.frag.myfragmentapplication/com.frag.myfragmentapplication.MainActivity}: android.view.InflateException: Binary XML file line #24: Binary XML file line #24: 膨胀类片段时出错

不确定代码有什么问题,我们将不胜感激。

【问题讨论】:

  • 将 weightsum =2 用于线性布局

标签: android fragment android-linearlayout


【解决方案1】:

当我尝试调试您的代码时,我收到此错误:

原因:java.lang.RuntimeException:berkaykoksal.com.test.testapp.MainActivity@308e8a6 必须实现 OnFragmentInteractionListener

现在我删除了其中一个片段并尝试了一个仍然给出相同错误的片段。这意味着您遇到的问题与多个片段无关。问题是您创建了 fragment.java 文件但没有删除 unused 函数。这里引起问题的主要原因是 OnFragmentInterractionListener 没有正确实现。但是你不需要它吗?太棒了

如果您像这样编辑您的 java 类以仅具有 OnCreateView 功能:

package *****;

import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;


public class fragTwo extends Fragment {

    public fragTwo() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_frag_two, container, false);
    }

}

package *****;

import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;



public class fragOne extends Fragment {

    public fragOne() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_frag_one, container, false);
    }

}

您会注意到问题将得到解决。它确实对我有用,如果您有任何其他问题,我可以提供帮助。

永远记得在 XML 文件中为你的片段提供 ID 值。

android:id="@+id/fragmentcontentarea1"
android:id="@+id/fragmentcontentarea2"

祝你好运!

【讨论】:

  • 我的片段类包含 only OnCreateView 方法,我没有任何其他功能。如果我删除片段周围的 LinearLayout 并设置 android:layout_width="match_parent" 它工作正常。
  • 在将 id 添加到片段标签后,它就像一个魅力。谢谢你
【解决方案2】:

我猜您的片段名称与您在布局中定义的名称不同。你能确认你有一个文件吗

com.frag.myfragmentapplication.fragTwo.java

请注意,大小写很重要。

【讨论】:

  • 我确实有这些课程。如果我删除 LinearLayout 就可以了。
【解决方案3】:

扩展FragmentActivity 而不是AppCompatActivity

public class MainActivity extends FragmentActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 2023-04-10
    • 2021-07-14
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多