Android:FragmentManager无法替换FrameLayout

时间:2014-09-29 20:52:35

标签: android android-fragments fragment navigation-drawer fragmentmanager

我无法在导航抽屉中选择一个选项时显示我的简单片段,屏幕只是留空。导航抽屉工作正常,我知道selectItem()方法正在触发 - 抽屉在选择项目后关闭,因为在drawerLayout.closeDrawer(listView);方法的末尾调用了selectItem()

以下是我的MainActivity中的相关代码

public class MainActivity extends ActionBarActivity implements
        OnItemClickListener {

@Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        // TODO Auto-generated method stub
        selectItem(position);

    }

    public void selectItem(int position) {
        Fragment fragment = null;
        Bundle args = new Bundle();
        fragment = new BookStayFragment();
        args.putString("randomString", "testing this string");

        fragment.setArguments(args);

        FragmentManager fragmentManager = getSupportFragmentManager();
        //This line doesn't seem to be replacing mainContent fragment in activity_main ?
        fragmentManager.beginTransaction().replace(R.id.mainContent, fragment).commit();

        listView.setItemChecked(position, true);
        setTitle(myAdapter.customerMainMenu[position]);
        drawerLayout.closeDrawer(listView);

    }

activity_main.xml中

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout 
        android:id="@+id/mainContent"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </FrameLayout>

    <ListView
        android:background="#3f51b5"
        android:divider="@null"
        android:id="@+id/drawerList"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="left"
        >
    </ListView>

</android.support.v4.widget.DrawerLayout>

我试图放入@ + id / mainContent

的简单片段类
package com.example.hotelsystem;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class BookStayFragment extends Fragment{
    TextView tvTest;

    public static final String ITEM_NAME = "Testing fragment loading from nav drawer";

    public BookStayFragment() {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View view = inflater.inflate(R.layout.book_stay_fragment, container, false);
        tvTest = (TextView) view.findViewById(R.id.book_stay_text);
        tvTest.setText(getArguments().getString(ITEM_NAME));

        return view;
    }   
}

使用此xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView 
        android:id="@+id/book_stay_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="test"
        />

</LinearLayout>

1 个答案:

答案 0 :(得分:1)

Bundles / 对的集合。
是用于标识的字符串,因此您可以从Bundle再次检索它。
在您的情况下,您的也是一个字符串。我相信在这种情况下,您的会让您感到困惑。

以下是您目前正在做的事情:

使用selectItem方法:

args.putString("randomString", "testing this string");

所以你把一个包含“测试这个字符串”的字符串放入args中,并为其指定“randomString”。

然后在Fragment课程中,您要为TextView设置文字:

tvTest.setText(getArguments().getString(ITEM_NAME));

在这里,您将获得分配给Fragment的参数包,并查找具有 ITEM_NAME的字符串。您已指定ITEM_NAME = "Testing fragment loading from nav drawer",但没有为“从导航抽屉加载测试片段”分配给参数包的字符串。您应该寻找具有“randomString”的字符串。