如何正确查看片段

时间:2014-03-01 22:46:21

标签: java android android-fragments

我目前正在做一个实验室,我收到一个奇怪的错误。 一切都编译得很好,应用程序运行正常但是当我点击一个名字时,它显示了Twitter提要,但仍然显示了人物的名称,就像将一个视图叠加在另一个视图之上。

以下是我的MainActivity代码:

package course.labs.fragmentslab;

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity implements
    FriendsFragment.SelectionListener {

private static final String TAG = "Lab-Fragments";

private FriendsFragment mFriendsFragment;
private FeedFragment mFeedFragment;

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

    // If the layout is single-pane, create the FriendsFragment 
    // and add it to the Activity

    if (!isInTwoPaneMode()) {

        mFriendsFragment = new FriendsFragment();

        //TODO 1 - add the FriendsFragment to the fragment_container
        FragmentManager fragM = getFragmentManager();
        FragmentTransaction fragT = fragM.beginTransaction();
        fragT.add(R.id.fragment_container, mFriendsFragment);
        fragT.commit();



    } else {

        // Otherwise, save a reference to the FeedFragment for later use

        mFeedFragment = (FeedFragment) getFragmentManager()
                .findFragmentById(R.id.feed_frag);
    }

}

// If there is no fragment_container ID, then the application is in
// two-pane mode

private boolean isInTwoPaneMode() {

    return findViewById(R.id.fragment_container) == null;

}

// Display selected Twitter feed

public void onItemSelected(int position) {

    Log.i(TAG, "Entered onItemSelected(" + position + ")");

    // If there is no FeedFragment instance, then create one

    if (mFeedFragment == null)
        mFeedFragment = new FeedFragment();

    // If in single-pane mode, replace single visible Fragment

    if (!isInTwoPaneMode()) {

        //TODO 2 - replace the fragment_container with the FeedFragment

        FragmentManager fragM = getFragmentManager();
        FragmentTransaction fragT = fragM.beginTransaction();
        fragT.add(R.id.fragment_container ,mFeedFragment);
        fragT.commit(); 



        // execute transaction now
        getFragmentManager().executePendingTransactions();

    }

    // Update Twitter feed display on FriendFragment
    mFeedFragment.updateFeedDisplay(position);

 }
}

以下是相关的xml文件:

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

正如我之前所说,一切运行正常,但是活动保留了一个片段视图,然后在其上显示另一个片段视图。

我不知道为什么。

2 个答案:

答案 0 :(得分:10)

您需要替换片段,而不是添加新片段。这应该在onItemSelected

中完成
fragT.replace(R.id.fragment_container ,mFeedFragment);

我自己最初犯了同样的错误;-)祝你好运!

答案 1 :(得分:0)

您还可以删除上一个片段并添加新片段,如下所示:

…
fragT.remove(mFriendsFragment);
fragT.add(R.id.fragment_container, mFeedFragment);
fragT.commit();

好的,使用&#34;替换&#34;方法要简单得多,但这只是为了展示另一种方法。