我正在开发一个应用程序来呈现地图(使用片段)和列表(使用ListFragment)。所以,我有一个活动,根据用户的偏好启动应用程序以及mapfragment或列表片段。我可以使用FragmentManager和FragmentTransaction轻松替换mapfragment的当前活动。我遇到的问题是如何从活动中调用或启动ListFragment。 listfragment使用ListViewAdapter类来扩充自定义布局(重复使用不同的信息),因此如果我想使用事务,则需要在布局中使用listview容器。问题是我使用的是布局而不是容器。
有什么想法可以解决这个问题或者其他任何方式来处理在活动中开始呈现listfragment吗?
答案 0 :(得分:1)
如果您尝试同时显示两个不同的片段,请查看此documentation,但基本思路是在您的活动布局中包含多个FrameLayout
。另外,请不要忘记View.setVisibility()
ListFragments的启动方式与其他任何片段相同。
例如:
getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame, new MyListFragment()
.commit();
一个更详细的例子:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.plusButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame, new MyListFragment())
.commit();
}
});
}
activity_main.xml中
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<FrameLayout
android:id="@+id/content_frame"
android:clickable="true"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:text="Press For List"
android:id="@+id/plusButton"
android:layout_gravity="center"/>
</RelativeLayout>