3

仕組みの詳細については、以前の質問を参照してください。

現在のセットアップ

を拡張する(ABS)ライブラリSherlockMapFragment内で呼び出されるクラスを作成しました。これは地図などを表示するのにうまく機能しますが、今まで(私はばかなので)次のことに気づきませんでした:ActionBarSherlockSupportMapFragment

  • mapFrag という SherlockMapFragment のインスタンスを作成しました。
  • 次に、これを使用して表示するために、mapFrag.newInstance() を呼び出します。

これが実際に行っていることは、SupportMapFragment のインスタンスを返すことですが、この呼び出しは MapView を表示するために必要です。

フラグメントをタブ付きのナビゲーションバーに追加しようとしているため、これは私が達成しようとしているものの大きな問題ですがSupportMapFragment、TabListener に追加することはできません。SherlockFragmentまたはFragment

誰でもこれを回避する方法を見ることができますか? または、自分自身を明確にする必要がある場合は、質問してください。

考えられる解決策の 1 つ

1 つの解決策は、独自のタブ バーを作成し、自分のトランザクションを処理するFragmentsことです。ただし、ツールは既に存在するため、単純な修正であれば、これを実行したくありません。

前もって感謝します

4

2 に答える 2

3

SherlockFragmentを拡張して、MapViewを自分で処理することができます。これは次のようになります...

public class SherlockMapFragment extends SherlockFragment
{
private MapView mapView;

@Override
public void onActivityCreated(Bundle savedInstanceState)
{
    super.onActivityCreated(savedInstanceState);

    mapView = (MapView) getView().findViewById(R.id.my_map_id);
    mapView.onCreate(savedInstanceState);
}

@Override
public void onResume()
{
    super.onResume();
    mapView.onResume();
}

@Override
public void onPause()
{
    super.onPause();
    mapView.onPause();
}

@Override
public void onLowMemory()
{
    super.onLowMemory();
    mapView.onLowMemory();
}

@Override
public void onSaveInstanceState(Bundle outState)
{
    super.onSaveInstanceState(outState);
    mapView.onSaveInstanceState(outState);
}

@Override
public void onDestroy()
{
    super.onDestroy();
    mapView.onDestroy();
}
}

SupportMapFragmentを絶対に使用しなければならないということは何もありません。新しいAPIの最も優れた部分の1つは、MapViewを通常のビューとして使用できることです。

于 2012-12-10T04:55:30.223 に答える
0

これを試して

パブリッククラスBysFragmentActivityはSherlockFragmentActivityを拡張します{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ActionBar actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    Tab tab = actionBar.newTab()
            .setText("Mapa 1")
            .setTabListener(new TabListener<BySMapFragment>(this, "mapa", BySMapFragment.class));
    actionBar.addTab(tab);
    tab = actionBar.newTab()
            .setText("Mapa 2")
            .setTabListener(new TabListener<BySMapFragment>(this, "mapa", BySMapFragment.class));
    actionBar.addTab(tab);

}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
}

@Override
public void onAttachFragment(android.support.v4.app.Fragment fragment) {
    super.onAttachFragment(fragment);
}

public static class TabListener<T extends Fragment> implements ActionBar.TabListener {

    private Fragment mFragment;
    private final Activity mActivity;
    private final String mTag;
    private final Class<T> mClass;

    public TabListener(Activity activity, String tag, Class<T> clz) {
        mActivity = activity;
        mTag = tag;
        mClass = clz;
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {    
        if (mFragment == null) {
            mFragment = Fragment.instantiate(mActivity, mClass.getName());
            ft.replace(android.R.id.content, mFragment, mTag);
        } else {
            ft.attach(mFragment);
        }
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        if (mFragment != null) {
            ft.detach(mFragment);
        }
    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {

    }

}

}

于 2013-01-14T21:52:07.730 に答える