我目前正在做一个实验室,我收到一个奇怪的错误。 一切都编译得很好,应用程序运行正常但是当我点击一个名字时,它显示了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" /
正如我之前所说,一切运行正常,但是活动保留了一个片段视图,然后在其上显示另一个片段视图。
我不知道为什么。
答案 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;方法要简单得多,但这只是为了展示另一种方法。