我创建了一个包含两个标签的Activity。其中一个标签是地图(Google Maps API v2)。
没有Activty的布局(没有调用setContent()),因为活动屏幕会动态填充片段,具体取决于所选的选项卡。
现在,我需要在地图的底部添加一个TextView。
我想我可以扩展MapFragment
然后处理onCreateView
方法,以便返回包含Map和TextView的不同View。我不确切知道如何做到这一点。有什么建议吗?
修改
actionbar.addTab(actionbar.newTab()
.setText("LIST")
.setTabListener(new TabListener<ListFragment>(
this, "list", ListFragment.class)));
Log.i("TabListener","chiamata TABLISTENER 2");
actionbar.addTab(actionbar.newTab()
.setText("MAP")
.setTabListener(new TabListener<CustomMapFragment>(
this, "map", CustomMapFragment.class)));
TabListener类:
public class TabListener<T extends Fragment> implements ActionBar.TabListener {
private final Activity mActivity;
private final String mTag;
private final Class<T> mClass;
private final Bundle mArgs;
private Fragment mFragment;
public TabListener(Activity activity, String tag, Class<T> clz) {
this(activity, tag, clz, null);
}
public TabListener(Activity activity, String tag, Class<T> clz, Bundle args) {
mActivity = activity;
mTag = tag;
mClass = clz;
mArgs = args;
mFragment = mActivity.getFragmentManager().findFragmentByTag(mTag);
if (mFragment != null && !mFragment.isDetached()) {
FragmentTransaction ft = mActivity.getFragmentManager().beginTransaction();
ft.detach(mFragment);
ft.commit();
}
}
public void onTabSelected(Tab tab, FragmentTransaction ft) {
if (mFragment == null) {
mFragment = Fragment.instantiate(mActivity, mClass.getName(), mArgs);
ft.add(android.R.id.content, mFragment, mTag);
} else {
ft.attach(mFragment);
}
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
if (mFragment != null) {
ft.detach(mFragment);
}
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
}
答案 0 :(得分:0)
您需要将MapFragment(或SupportMapFragment)放在FrameLayout或RelativeLayout中。然后,您可以在与MapFragment的兄弟相同的布局中添加TextView。也许最简单的方法是继承MapFragment并覆盖onCreateView方法。
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
FrameLayout wrapper = new FrameLayout(...);
TextView tv = new TextView(...);
wrapper.addView(view);
wrapper.addView(tv);
return wrapper;
}