从ListView切换到Android中的子ListView

时间:2012-07-24 11:34:41

标签: android android-listview

我有一个应用MainActivity创建ActionBar tabs(使用ActionBarSherlock)。

每个tab加载Fragment。一个片段有ListView,我在其中加载项目。每个项目都会响应OnItemClick事件。

单击某个项目后,该应用程序将从Web服务器获取数据。我想在新的ListView中显示该数据。但那就是我被困住的地方。

如何从第一个主ListView切换到'子ListView`?

请记住,我当前的View是一个片段,它已加载到选项卡中。当我显示新的“子”ListView时,我希望保持在同一个标​​签页上。

此外,当我在Android设备上推后button时,我希望它再次显示主ListView

实际上,有点像iPhone使用TableView

1 个答案:

答案 0 :(得分:1)

为了做到这一点,你已经使用了另一个Fragment。您需要创建Fragment,然后用FragmentTransaction替换旧版本,如果要使用“后退”按钮,则需要将新片段添加到Backstack。 如果这些ListFragment在数据方面完全不同,我将有2个片段类(例如:FirstListFragment,SecondListFragment)。

以下是我工作的应用程序中的一些代码:

    // Here I get the FragmentTransaction

    FragmentTransaction ft = getFragmentManager().beginTransaction();

    // I replace it with a new Fragment giving it data. Here you need to tell 
    // the FragmentTransaction what (or actually where) and by what you want to replace. 

    ft.replace(R.id.fraglist, new ModuleFragment(lpId, sqId, sqName));

应该在XML布局中定义R.id.fraglist(除非您以编程方式创建布局)。它只是默认片段的ID。

    // I set the animation

    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);

    // I add it to the backstack so I can use the back button

    ft.addToBackStack(null);

    // Then I finally commit so it happens !

    ft.commit();

您还可以使用Bundle来解析数据:

    Bundle moduleBundle = new Bundle();
    moduleBundle.putString("id", id);
    moduleBundle.putString("description", description);
    moduleFragment.setArguments(moduleBundle);