我有一个应用MainActivity
创建ActionBar
tabs
(使用ActionBarSherlock
)。
每个tab
加载Fragment
。一个片段有ListView
,我在其中加载项目。每个项目都会响应OnItemClick
事件。
单击某个项目后,该应用程序将从Web服务器获取数据。我想在新的ListView
中显示该数据。但那就是我被困住的地方。
如何从第一个主ListView
切换到'子ListView`?
请记住,我当前的View是一个片段,它已加载到选项卡中。当我显示新的“子”ListView
时,我希望保持在同一个标签页上。
此外,当我在Android设备上推后button
时,我希望它再次显示主ListView
。
实际上,有点像iPhone使用TableView
。
答案 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);