在andriod.app.Fragment和layout.Fragment之间混淆

时间:2016-11-15 11:58:41

标签: android android-fragments

我有两个单独的按钮,点击后会显示单独的片段。 这是我的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: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"
    android:orientation="vertical"
    tools:context="com.example.sjha.myapplication.MainActivity">

  <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:orientation="horizontal">
      <Button
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:id="@+id/fragment_one"
          android:text="Fragment1"/>

      <Button
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:id="@+id/fragment_two"
          android:text="Fragment2"/>



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

        <fragment
            android:name="layout.FragmentOne"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/fragment">


        </fragment>



    </LinearLayout>




</LinearLayout>

我迷失在android.app.Fragmentlayout.Fragment之间。请帮我解决这个问题。

这是我的java文件。

package com.example.sjha.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.view.View;

import layout.FragmentOne;
import layout.FragmentTwo;

public class MainActivity extends AppCompatActivity {

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

    public void changeFragment(View v)
    {
        Fragment fragment;
        if (v==findViewById(R.id.fragment_one))
        {
            //HERE IS THE ERROR..
            //I AM LOST BETWEEN android.app.Fragment and layout.Fragment
            //FragmentTwo() is layout.Fragment while fragment is android.app.Fragment

            fragment= new FragmentTwo();
            FragmentManager fm = getFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            ft.replace(R.id.fragment, fragment);
            ft.commit();

        }
    }
}

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

存在不匹配。单击按钮时,您无法在布局中查找Fragment,因为它们可能尚未添加。更好的方法是检查按钮ID。

重建对onClick事件按钮作出反应的方法,并根据Button id选择fragmment:

public void onClick(View view) {
   Fragment fragment = new FragmentOne();
   switch (view.getId) {
      case R.id.fragment_one:
      break;
      case R.id.fragment_one:
      fragment = new FragmentTwo();
      break;
   }
   FragmentManager fm = getFragmentManager();
   FragmentTransaction ft = fm.beginTransaction();
   ft.replace(R.id.fragment, fragment);
   ft.commit();
}

答案 1 :(得分:0)

当您以静态方式(在布局中)定义片段时,您无法使用片段事务替换/删除它。 如果要在片段之间交换,请使用动态方式,您必须使用片段的持有者,使用FrameLayout,然后您可以使用fragmentTransaction来替换片段。

您可以在这些链接中获得更多信息和代码示例:

https://developer.android.com/guide/components/fragments.html

http://coreylatislaw.com/managing-static-and-dynamic-fragments/