如何正确使用片段

时间:2016-06-18 06:14:58

标签: android android-fragments

我试图了解如何使用片段,但由于某些原因它们无法正常工作。你能解释一下如何使用它们,或者至少告诉我我的代码有什么问题。

主要活动:

package test.testing;

import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

import layout.BlankFragment;

public class MainActivity extends FragmentActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        BlankFragment fragment = new BlankFragment();
        fragmentTransaction.add(R.id.main, fragment);
        fragmentTransaction.commit();

    }



}

Mainactivity xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="test.testing.MainActivity">
    <fragment
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/main"/>


</LinearLayout>

BlankFragment:

package layout;
import android.os.Bundle;
        import android.support.v4.app.Fragment;
        import android.view.LayoutInflater;
        import android.view.View;
        import android.view.ViewGroup;
        import test.testing.R;

/**
 * A simple {@link Fragment} subclass.
 */
public class BlankFragment extends Fragment {


    public BlankFragment() {
        // 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_blank, container, false);
    }

}

BlankFragment XML:

<LinearLayout 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"
    android:paddingTop="20dp"
    android:paddingLeft="20dp"
    android:paddingBottom="20dp"
    android:background="#000000"
    tools:context="layout.BlankFragment">

    <!-- TODO: Update blank fragment layout -->
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <ImageView
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:background="@drawable/graycircle"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:paddingLeft="20dp"
            android:gravity="center_vertical"
            android:textColor="#ffffff"
            android:text="Event 1"/>

    </LinearLayout>


</LinearLayout>

谢谢

1 个答案:

答案 0 :(得分:1)

在mainactivity.xml中

改变这个:

<fragment
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/main"/>

<FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/main"/>
  

这是有效的,因为当你使用 fragment 标签时,你需要在xml本身设置那个类,但是当你以编程方式创建一个像你在这种情况下那样的片段时,XML可以有只有一个容器中的片段膨胀。

-

更新

您在MainActivity中添加片段的代码不正确。您正在使用支持片段,因此您应该使用getSupportFragmentManager()

在代码中进行以下更改。

更改MainActivity.java的import语句:

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;

更改片段的代码更改:

  FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    BlankFragment done = new BlankFragment();
        fragmentTransaction.add(R.id.main, done, "frag");
        fragmentTransaction.commit();
  

我在这里修改了你的代码。   http://pastebin.com/BEqExkbN