3

2 つのタブを含むアクティビティを作成しました。これらのタブの 1 つがマップ (Google Maps API v2) です。

Activty のレイアウトはありません (setContent() は呼び出されません)。これは、選択したタブに応じて、アクティビティ画面が Fragment で動的に埋められるためです。

ここで、マップの下部に TextView を追加する必要があります。

Map と TextView の両方を含む別のビューを返すためにMapFragment、メソッドを拡張してから作業できると思います。onCreateViewどうすればできるのか正確にはわかりません。なにか提案を?

編集:

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) {

    }
}
4

1 に答える 1

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;
}
于 2014-04-09T05:14:48.667 に答える