从活动中的后退按钮开始片段

时间:2016-06-13 09:44:09

标签: android

我想覆盖活动中的后退按钮,以便我可以启动一个片段,通常在我使用意图的活动中,但据我所知,我不能使用意图来调用片段。

我想使用后退按钮启动意图的原因是它可以从数据库重新加载新信息,否则如果我不覆盖后退按钮,它将只加载旧的前一个片段(缓存)数据。

下面的代码不起作用:

@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"

/>

2 个答案:

答案 0 :(得分:1)

试试这个:

FrameLayout

如果您还没有用于对片段进行充气的容器视图,则必须在活动中添加ViewPager作为容器。如果您需要更多说明,请告诉我。

修改

非常感谢完整的活动代码。由于您使用的是 handler.removeCallbacksAndMessages(null); new leftRoom().execute(); ,因此以这种方式替换片段将不起作用。现在,您提到了要实现的onBackPressed中的两行:

Fragment_01_Rooms

这两种方法的作用是什么?它们在哪里实施?如果这些方法更新了您的数据库,并且viewPageronResume中最左边的元素,我建议您这样做:

  1. Fragment_01_Rooms的{​​{1}}中,刷新您要向用户显示的数据(如果上面的两行已刷新数据,则无需执行任何操作)。
  2. 在活动中,覆盖onBackPressed并调用viewPager.setCurrentItem(0)而不是getSupportFragmentManager...commit()
  3. 如果这可以解决问题,请告诉我。

答案 1 :(得分:0)

@Override
public void onBackPressed(){

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

在你的leftRoom AsyncTask onPostExecute中调用它。

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