碎片没有被替换

时间:2015-10-16 02:03:10

标签: android

我有一个FragmentActivity,它应该将前屏幕片段(带按钮)换成按钮在点击一个时指向的片段。

假设单击了调用SourceListFragment的按钮。调用onCreate()的{​​{1}}和onCreateView(),但屏幕保持不变,即前屏幕片段不会被替换。

我想知道我做错了什么。这是我的代码。

SourceListFragment

这是布局:

activity_main.xml中:

public class MainActivity extends FragmentActivity implements MainFragment.OnFragmentInteractionListener {

 ...

@Override
protected void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);

    // set uncaught exception handler for thread
    // Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));

    setContentView(R.layout.activity_main);

    FragmentManager fragmentManager = getSupportFragmentManager();

    mMainFrame = MainFragment.newInstance();
    fragmentManager.beginTransaction().add(R.id.container, mMainFrame).commit();
}

    @Override
    public void onFragmentInteraction(int id) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        switch (id) {
            case R.id.button_sources:
                Fragment fragment = new SourceListFragment();
                FragmentTransaction fragmentTrans = fragmentManager.beginTransaction();
                fragmentTrans.replace(R.id.main_screen, fragment);
                fragmentTrans.addToBackStack(null);
                fragmentTrans.commit();
                break;
            default:
                break;
        }
    }
}



public class SourceListFragment extends Fragment implements AbsListView.OnClickListener {
    ...

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

        Log.d("SOURCELIST", "SourceListFragment onCreateView\n");

        View view = inflater.inflate(R.layout.fragment_sourceitem_list, viewGroup, false);

        return view;
    }


    public static SourceListFragment newInstance(BluetoothAdapter adapter) {
        SourceListFragment fragment = new SourceListFragment();
        mBTAdapter = adapter;
        return fragment;
    }

    // Container Activity must implement this interface
    public interface OnFragmentInteractionListener {
        public void onFragmentInteraction(int id);
    }
}

fragment_main.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:materialdesign="http://schemas.android.com/apk/res-auto"
              xmlns:tools="http://schemas.android.com/tools"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:background="#FFF"
              android:orientation="vertical"
              android:id="@+id/container">

</FrameLayout>

fragment_sourceitem_list.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/main_screen"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
    <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="148dp">

        <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="128dp"
                android:background="#01579b"
                android:paddingBottom="20dp"
                android:paddingLeft="104dp" android:id="@+id/banner">
        </RelativeLayout>

    </RelativeLayout>

    <android.support.percent.PercentRelativeLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        <Button
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:id="@+id/button_sources"
                app:layout_widthPercent="30%"
                app:layout_heightPercent="30%"
                app:layout_marginTopPercent="10%"
                app:layout_marginLeftPercent="15%"
                app:layout_marginRightPercent="5%"/>
...

    </android.support.percent.PercentRelativeLayout>
</LinearLayout>

任何帮助将不胜感激。

由于

1 个答案:

答案 0 :(得分:1)

您将片段添加到ID为main_screen的线性布局中,但片段应添加到FrameLayout中。在LinearLayout的情况下,转换确实有效,但新添加的片段在显示之外。