片段未显示在活动

时间:2017-09-13 07:49:39

标签: android android-fragments

尝试将Fragment添加到我的Activity中,但它没有显示出来。

public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    WeatherFragment mainFragment = new WeatherFragment();
    getFragmentManager()
            .beginTransaction()
            .add(R.id.main_weather_container, mainFragment)
            .commit();
    }
}

还有我的片段:

public class WeatherFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        boolean isAttachedToParent = false;
        View inflatedView = inflater.inflate(R.layout.main_weather_fragment, container, isAttachedToParent);
    return inflatedView;
}
}

R.id.main_weather_container - 我的MainActivity中的FrameLayout R.layout.main_weather_fragment - 片段的布局
我做错了什么?
我曾尝试使用FragmentActivity + v4支持片段和fragmentSupportManager,但它没有任何区别。

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:orientation="vertical">

    <FrameLayout
        android:id="@+id/main_weather_container"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:padding="@dimen/padding_16_dp" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/words_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="3" />

</LinearLayout>

更新:问题不在于片段事务或其他什么,我使用了工具:命名空间,这就是为什么片段没有显示。抱歉:(

4 个答案:

答案 0 :(得分:0)

正如我所看到的,您正在使用AppCompatActivity但使用getFragmentManager。 使用AppCompatActivity,您需要使用getSupportFragmentManager()而不是getFragmentManager()

public class MainActivity extends AppCompatActivity { 
private static final String TAG = MainActivity.class.getSimpleName();

@Override 
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    WeatherFragment mainFragment = new WeatherFragment();
    getSupportFragmentManager()
            .beginTransaction() 
            .add(R.id.main_weather_container, mainFragment)
            .commit(); 
    } 
} 

您的WeatherFragment应该延长android.support.v4.app.Fragment;

<?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:weightSum="4"
    android:orientation="vertical">

    <FrameLayout
        android:id="@+id/main_weather_container"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:padding="@dimen/padding_16_dp" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/words_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="3" />

</LinearLayout>

在父版面中添加了WeightSum

答案 1 :(得分:0)

尝试这种方式。在您的活动调用片段

 Fragment fragment = Video_fragment.newInstance();
                FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
                transaction.replace(R.id.framecontainer, fragment).commit();
片段类中的

public class Video_fragment extends Fragment{
    View view;

    public static Fragment newInstance() {
        Video_fragment fragment = new Video_fragment();
        return fragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        view= inflater.inflate(R.layout.video_frag, container, false);
        return view;
    }
}

答案 2 :(得分:0)

public class WeatherFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View inflatedView = inflater.inflate(R.layout.main_weather_fragment, null, false);
    return inflatedView;
   }
}

答案 3 :(得分:0)

Fragment中创建WeatherFragment的实例:

public static WeatherFragment newInstance() {
    Bundle args = new Bundle();
    WeatherFragment weatherFragment = new WeatherFragment();
    weatherFragment.setArguments(args);
    return weatherFragment;
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_layout, container, false);
}

Activity中的MainActivity内:

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    WeatherFragment weatherFragment = WeatherFragment.newInstance();
    getSupportFragmentManager()
            .beginTransaction()
            .replace(R.id.flContainerId, weatherFragment)
            .commit();
}

您的布局文件将是:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/flContainerId"/>
相关问题