如何将Android片段添加到活动中?

Dan*_*son 4 xml layout android fragment android-activity

我想在我的主要活动中添加一个片段,所以我有这个片段类(TitleFragment.java):

package com.myapp.app1;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class TitleFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_title, container, false);
    }
}
Run Code Online (Sandbox Code Playgroud)

接下来是我的片段的实际内容,包含在fragment_title.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
       <ImageView 
        android:id="@+id/logo_iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/logo_main"
        android:contentDescription="@string/app_name"
        android:scaleType="fitStart"
        android:adjustViewBounds="true" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

在我的内部,我activity_main.xml在活动的常规内容中有这个片段:

<fragment 
            android:name="com.myapp.app1.TitleFragment"
            android:id="@+id/title_fragment"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
Run Code Online (Sandbox Code Playgroud)

这种方法是创建片段的正确方法吗?我的应用程序崩溃了,LogCat似乎表明它与扩展片段视图有关,但我不确定.

顺便说一句,这个片段的原因是每个页面上都有应用程序徽标(图像和一些可更新的文本),这是一个很好的方法吗?对不起我的新手问题.

Sho*_*shi 9

我从我的开始片段MainActivity.主要活动延伸FragmentActivity.我使用的方式是:

FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.body_frame, new MyFragment()).commit();
Run Code Online (Sandbox Code Playgroud)

在你的情况下,它应该看起来像:

FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.title_fragment, new TitleFragment()).commit();
Run Code Online (Sandbox Code Playgroud)

记得我用过一个FragmentActivity开始Fragment.我也习惯于android-support-v4.jar 在较低版本的操作系统中支持片段.没有android-support-v4.jar, FragmentManager manager = getSupportFragmentManager();可能看起来像:FragmentManager manager = getFragmentManager();

编辑:

你应该修改你的片段类:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view =  inflater.inflate(R.layout.fragment_title, container, false);
    // you can use findViewById() using the above 'view'
      ......................
      ....your code........
       ................
    return view;
}
Run Code Online (Sandbox Code Playgroud)


Mig*_*hez 6

在片段部分添加以下代码:

tools:layout="@layout/fragment_title"
Run Code Online (Sandbox Code Playgroud)

这是一个例子:

<fragment 
    android:name="com.myapp.app1.TitleFragment"
    android:id="@+id/title_fragment"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    tools:layout="@layout/fragment_title />
Run Code Online (Sandbox Code Playgroud)


Dev*_*oni 5

您可以像这样简单地执行此操作并声明片段的名称:

<androidx.fragment.app.FragmentContainerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:name="com.example.ExampleFragment" />
Run Code Online (Sandbox Code Playgroud)