1

我不能讓我的簡單的片段在選擇在我的抽屜式導航欄中的選項屏幕只是停留空白露面。抽屜式導航欄工作正常,我知道selectItem()方法燒製 - 選擇一個項目,因爲drawerLayout.closeDrawer(listView);被稱爲在selectItem()方法結束後抽屜關閉。安卓:麻煩與FragmentManager不是取代的FrameLayout

這裏是我的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> 

簡單的F中的相關代碼ragment類我試圖將它放在@ + 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> 
+0

如果您嘗試將BookStayFragment添加到活動的onCreate中的佈局,是否有效? – stkent 2014-09-29 21:46:07

+0

@stkent實際上似乎沒有工作否 - 在我的MainActivity中放置完全相同的線onCreate() – user3324984 2014-09-29 22:10:34

+0

您能否顯示完整的活動代碼? – stkent 2014-09-29 22:11:44

回答

1

Bundles關鍵/對的集合。
A 是一個字符串,用於標識的值,因此您可以再從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」的字符串。

+0

不應該加載一個或另一個字符串?我沒有收到任何字符串。可以是我的課程中的ITEM_NAME,也可以是我使用關鍵字randomString作爲Bundle發送的ITEM_NAME。 – user3324984 2014-09-29 23:09:42

+0

實際上已經試過了,它工作正常 - 後見之明很愚蠢我想我已經在想它試圖發送一個字符串無論如何我可以大聲笑。謝謝! – user3324984 2014-09-29 23:10:13

+0

'getString'方法有兩種形式。你使用的是'getString(key)'。另一個是'getString(key,defaultValue)'。所以在你的情況下,如果你使用getString(「randomString」,ITEM_NAME)''它會分配'測試片段加載從導航抽屜'到'TextView'如果它找不到一個字符串**鍵「randomString 」。 – 2014-09-29 23:19:50