当前位置: 首页 > 知识库问答 >
问题:

使用ActionBarSherlock和新的SupportMapFragment

曾永新
2023-03-14

我需要在我的应用程序中实现新的Google Maps,为此,我需要使用SupportMapFragment类。

**我的问题**

是否可以将SupportMapFragment类与ActionBarSherlock一起使用?

以下是它们的支持方式。

package com.actionbarsherlock.app;

import android.app.Activity;
import android.support.v4.app.DialogFragment;
import com.actionbarsherlock.internal.view.menu.MenuItemWrapper;
import com.actionbarsherlock.internal.view.menu.MenuWrapper;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;

import static com.actionbarsherlock.app.SherlockFragmentActivity.OnCreateOptionsMenuListener;
import static com.actionbarsherlock.app.SherlockFragmentActivity.OnOptionsItemSelectedListener;
import static com.actionbarsherlock.app.SherlockFragmentActivity.OnPrepareOptionsMenuListener;

public class SherlockDialogFragment extends DialogFragment implements OnCreateOptionsMenuListener, OnPrepareOptionsMenuListener, OnOptionsItemSelectedListener {
    private SherlockFragmentActivity mActivity;

public SherlockFragmentActivity getSherlockActivity() {
    return mActivity;
}

@Override
public void onAttach(Activity activity) {
    if (!(activity instanceof SherlockFragmentActivity)) {
        throw new IllegalStateException(getClass().getSimpleName() + " must be attached to a SherlockFragmentActivity.");
    }
    mActivity = (SherlockFragmentActivity)activity;

    super.onAttach(activity);
}

@Override
public void onDetach() {
    mActivity = null;
    super.onDetach();
}

@Override
public final void onCreateOptionsMenu(android.view.Menu menu, android.view.MenuInflater inflater) {
    onCreateOptionsMenu(new MenuWrapper(menu), mActivity.getSupportMenuInflater());
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    //Nothing to see here.
}

@Override
public final void onPrepareOptionsMenu(android.view.Menu menu) {
    onPrepareOptionsMenu(new MenuWrapper(menu));
}

@Override
public void onPrepareOptionsMenu(Menu menu) {
    //Nothing to see here.
}

@Override
public final boolean onOptionsItemSelected(android.view.MenuItem item) {
    return onOptionsItemSelected(new MenuItemWrapper(item));
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    //Nothing to see here.
    return false;
}

}

共有1个答案

魏泰
2023-03-14

这一切都像一个魅力,主要归功于杰克在行动巴夏洛克方面的伟大工作

以下是我遵循的步骤:

  1. 在actiobarsherlock库项目中创建一个SherlockMapFragment类。我只是制作了一个SherlockFragment的副本,因为我还需要对SethasOptionsMenu(true)
  2. 的支持
  3. 活动扩展了SherlockFragmentActivity(像往常一样)
  4. 该片段扩展了新创建的SherlockMapFragment
  5. ActionBarSherlock需要新的google-play-services_lib
  6. 您的项目需要ActionBarSherlock库。不需要再次包含google-play-services,也不需要根据Google API构建。
  7. 正如Graham提到的,您必须放弃对API 7设备的支持:
package com.actionbarsherlock.app;

import com.actionbarsherlock.internal.view.menu.MenuItemWrapper;
import com.actionbarsherlock.internal.view.menu.MenuWrapper;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
import com.google.android.gms.maps.SupportMapFragment;

import android.app.Activity;
import android.support.v4.app.Watson.OnCreateOptionsMenuListener;
import android.support.v4.app.Watson.OnOptionsItemSelectedListener;
import android.support.v4.app.Watson.OnPrepareOptionsMenuListener;

public class SherlockMapFragment extends SupportMapFragment
        implements OnCreateOptionsMenuListener,
        OnPrepareOptionsMenuListener,
        OnOptionsItemSelectedListener {
    private SherlockFragmentActivity mActivity;

    public SherlockFragmentActivity getSherlockActivity() {
        return mActivity;
    }

    @Override
    public void onAttach(Activity activity) {
        if (!(activity instanceof SherlockFragmentActivity)) {
            throw new IllegalStateException(getClass().getSimpleName()
                    + " must be attached to a SherlockFragmentActivity.");
        }
        mActivity = (SherlockFragmentActivity) activity;

        super.onAttach(activity);
    }

    @Override
    public void onDetach() {
        mActivity = null;
        super.onDetach();
    }

    @Override
    public final void onCreateOptionsMenu(android.view.Menu menu, android.view.MenuInflater inflater) {
        onCreateOptionsMenu(new MenuWrapper(menu), mActivity.getSupportMenuInflater());
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        // Nothing to see here.
    }

    @Override
    public final void onPrepareOptionsMenu(android.view.Menu menu) {
        onPrepareOptionsMenu(new MenuWrapper(menu));
    }

    @Override
    public void onPrepareOptionsMenu(Menu menu) {
        // Nothing to see here.
    }

    @Override
    public final boolean onOptionsItemSelected(android.view.MenuItem item) {
        return onOptionsItemSelected(new MenuItemWrapper(item));
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Nothing to see here.
        return false;
    }
}
public class MainActivity extends SherlockFragmentActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/root"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <fragment
        android:id="@+id/fragment_map"
        android:name=".ui.fragments.MapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:tag="tag_fragment_map" />

    <fragment
        android:id="@+id/fragment_help"
        android:name=".ui.fragments.HelpFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:tag="tag_fragment_help" />
</FrameLayout>
public class MapFragment extends SherlockMapFragment {
    private GoogleMap mMap;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View root = super.onCreateView(inflater, container, savedInstanceState);
        mMap = getMap();
        return root;
    }
}
 类似资料:
  • ActionBarSherlock 是Android compatibility library 的一个扩展, 不知道什么原因 Android 兼容开发包没有包含ActionBar. 所以就有了ActionBarSherlock . 其使用方式和 兼容开发包类似. ActionBarSherlock 被设计成通过一个API就能够很方便使用所有版本的Android操作栏的设计模式。

  • 问题内容: 我能够将ActionBarSherlock和HoloEverywhere都导入Android Studio,但无法编译我的应用程序。 屏幕截图:https: //docs.google.com/file/d/0BwOn70drOiMfZHZVeXdEVzNXRXc/edit?usp = sharing 不管出于什么原因,我的意图似乎都吓到了,即使库导入工作正常,我也遇到以下错误,试图模

  • 我是个新手..在我看来,它应该能帮助我维持我的依赖关系的秩序。我正在尝试使用m2clipse插件使其工作,并使其与Android一起工作。(我使用了以下站点:http://looksok.wordpress.com/2012/05/12/use-maven-with-android-project/) 我已将现有项目更新为maven项目。并为actionbarsherlock项目添加了依赖项。我的

  • 问题内容: 我有一个简单的问题。对于我的android应用程序,我计划使用ActionBarSherlock和HoloEverywhere库。除了一件事之外,一切都运行良好:将溢出菜单强制到旧设备上。如果没有HoloEverywhere项目,则强制溢出可以与以下行完美配合: 我的问题是,当我申请时,我无法让强制溢出工作 Eclipse给我一个错误,指出没有找到与给定名称匹配的资源。没有.Force

  • 我在我的项目中使用ActionBarSherlock,有时需要在操作栏中添加一个或多个项。 在这个BaixadosFragment类(扩展了SherlockFragment)中,我使用了以下代码,它运行良好: [编辑]根据Droidt的建议,这奏效了:

  • 我读了很多关于actionbarsherlock、maven和android的东西,但我见过的解决方案都不适合我:( 我确信我已经非常接近解决方案了,但我不明白,我需要一些帮助:) 所以这是我的问题,我尝试创建一个依赖于ActionBarSherlock的android maven项目....这看起来很容易,但我总是犯错误 下面是我的配置: Eclipse Juno M2e 1.2.0 ADT 2