2016-06-13 89 views
1

我想重寫活動中的後退按鈕,以便我可以啓動片段,通常在活動中使用意圖,但據我瞭解,我無法使用意圖調用片段。從活動中的後退按鈕開始片段

我想使用後退按鈕來啓動意圖的原因是它可以從數據庫重新加載新信息,否則如果我不覆蓋後退按鈕,它將只加載舊的(緩存)數據。

我下面的代碼不工作:

@Override 
public void onBackPressed(){ 

    handler.removeCallbacksAndMessages(null); 

    new leftRoom().execute(); 

    Intent intent = new Intent(ActivityChatRoom.this,Fragment_01_Rooms.class); 
    startActivity(intent); 
} 

更新:

fragment_01_rooms.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    > 
    <!-- android:background="@color/gray_header"--> 

    <ListView 
     android:id="@+id/listView" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:fadeScrollbars="false" > 
    </ListView> 

</LinearLayout> 

更新(activity_main.xml中):

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/viewpager" 
tools:context=".FragmentMain" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 

/> 

回答

1

試試這個:

@Override 
public void onBackPressed(){ 

    handler.removeCallbacksAndMessages(null); 

    new leftRoom().execute(); 

    getSupportFragmentManager().beginTransaction().replace(R.id.viewpager, new Fragment_01_Rooms()).commit(); 

} 

你將不得不一個FrameLayout添加爲容器的活動,如果你還沒有在吹大片段的容器視圖。讓我知道你是否需要更多的澄清。

編輯

非常感謝完整的活動代碼。由於您正在使用ViewPager,因此以這種方式替換片段將不起作用。現在,你提到的onBackPressed兩行,你想要實現:

handler.removeCallbacksAndMessages(null); 
new leftRoom().execute(); 

什麼是這兩種方法的作用和他們在哪裏實現?如果這些方法更新你的數據庫,如果Fragment_01_Rooms是最左邊的元素在你的viewPager,我建議你這樣做:

  1. 在你Fragment_01_RoomsonResume,刷新你要顯示給用戶的數據(如果上面的兩行已經刷新數據,則不需要執行任何操作)。
  2. 在活動中,覆蓋onBackPressed並致電viewPager.setCurrentItem(0)而不是getSupportFragmentManager...commit()

讓我知道這是否解決了這個問題。

+0

我得到「容器無法解析或不是字段」我試圖添加android:id =「@ + id /容器」到fragment_01_rooms.xml,沒有工作。 – user3560827

+0

它不會。正如我在我的回答中所提到的,您需要爲要在其中激活此「Fragment」的「Activity」添加一個「FrameLayout」。這個'FrameLayout'應該有id「container」。如果您發佈了「活動」的XML,我將能夠更好地爲您提供幫助。 –

+0

我更新了fragment_01_rooms.xml的內容 – user3560827

0
@Override 
public void onBackPressed(){ 

    handler.removeCallbacksAndMessages(null); 
    new leftRoom().execute(); 
} 

在您的左邊房間AsyncTask onPostExecute調用此函數。

getSupportFragmentManager().beginTransaction().replace(R.id.container, new Fragment_01_Rooms()).commit();