android - New SupportMapFragment के साथ ActionBarSherlock का उपयोग करना




android-actionbar actionbarsherlock-map (4)

मैं एक्शनबार शेरलॉक का उपयोग कर देख रहा हूं लेकिन एक प्रश्न है जो मुझे वापस पकड़ रहा है।

तो मेरे आवेदन को एपीआई स्तर 7 के लिए पूरी तरह से पीछे संगत होने की जरूरत है।

मुझे अपने आवेदन में नए Google मानचित्र को लागू करने की आवश्यकता है और ऐसा करने के लिए मुझे SupportMapFragment क्लास का उपयोग करने की आवश्यकता है।

** मेरा प्रश्न **

क्या ActionBarSherlock साथ SupportMapFragment क्लास का उपयोग करना संभव है?

अग्रिम में धन्यवाद

संपादित करें

मैंने लाइब्रेरी को डाउनलोड किया है और देखा है। विस्तारित Fragments केवल परिवर्तन ही देख सकते हैं, वे सभी के लिए बहुत ही सरल हैं।

क्या आपको लगता है कि मैं खुद को समर्थन जोड़ सकता हूं?

यहां बताया गया है कि वे कैसे समर्थित हैं।

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;
}

}


असल में मुझे यकीन है कि यह SupportMapFragment पूरी तरह से ताजा है और शायद एक्शनबैरशॉक के रखरखाव के पास अब एबीएस प्रोजेक्ट में जोड़ने का समय नहीं था।

इसके अलावा इसे एपीआई एलवीएल 8+ की आवश्यकता है ताकि आप एपीआई एलवीएल 7 डिवाइस पर अपना समर्थन हटा सकें या आपको जेक के लिए नए समर्थन मैपफ्रैगमेंट के लिए समर्थन जोड़ने की प्रतीक्षा करनी होगी।

अन्य एपीआई lvls के लिए आप यहां चारों ओर एक काम पा सकते हैं: http://xrigau.wordpress.com/2012/03/22/howto-actionbarsherlock-mapfragment-listfragment/


मैं अभी तक हर जगह टिप्पणी नहीं कर सकता, यही कारण है कि मैं @ सुरेशेमलेमुडी का जवाब देता हूं यदि आप इसे फ्रैगमेंट, या शेरलॉक फ्रैगमेंट पर लागू करने की कोशिश कर रहे हैं, तो इसे https://.com/a/17803561/1755300 : https://.com/a/17803561/1755300


मैंने ActionBarSherlock के साथ SupportMapFragment को लागू करने का प्रयास किया।

यह बहुत अच्छा काम कर रहा है।

नीचे कोड स्निपेट है।

package com.example.newmapview;

import android.os.Bundle;
import android.widget.Toast;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.view.SubMenu;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;

public class MainActivity extends SherlockFragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SupportMapFragment fragment = SupportMapFragment.newInstance();
        getSupportFragmentManager().beginTransaction()
                .add(R.id.mapLayout, fragment).commit();

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        SubMenu subMenu = menu.addSubMenu("Type");

        subMenu.add("Normal");
        subMenu.add("SATELLITE");

        subMenu.getItem().setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        if (item.getTitle().toString().equalsIgnoreCase("Normal")) {
            Toast.makeText(this, "Clicked Normal", Toast.LENGTH_LONG).show();
            GoogleMap googleMap = ((SupportMapFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.mapLayout)).getMap();

            if (googleMap != null)
                googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
            else
                Toast.makeText(this, "GoogleMap is null", Toast.LENGTH_LONG)
                        .show();
        } else if (item.getTitle().toString().equalsIgnoreCase("SATELLITE")) {
            Toast.makeText(this, "Clicked SATELLITE", Toast.LENGTH_LONG).show();
            GoogleMap googleMap = ((SupportMapFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.mapLayout)).getMap();

            if (googleMap != null)
                googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
            else
                Toast.makeText(this, "GoogleMap is null", Toast.LENGTH_LONG)
                        .show();
        }

        return true;

    }
}

उम्मीद है कि यह मदद करेगा।


यह सब एक आकर्षण की तरह काम करता है, मुख्य रूप से एक्शनबैरशॉक पर जेक के महान काम के लिए धन्यवाद

यहां दिए गए चरणों का पालन किया गया है:

  1. अपने actiobarsherlock लाइब्रेरी प्रोजेक्ट में शेरलॉक मैपफ्रैगमेंट क्लास बनाएं। मैंने बस शेरलॉक setHasOptionsMenu(true) प्रति बना दी क्योंकि मुझे setHasOptionsMenu(true) लिए भी समर्थन की आवश्यकता थी
  2. गतिविधि शेरलॉक फ्रैगमेंट एक्टिविटी (सामान्य रूप से) तक फैली हुई है
  3. टुकड़ा नव निर्मित शेरलॉक मैपफ्रैगमेंट बढ़ाता है
  4. ActionBarSherlock को नई google-play-services_lib लाइब्रेरी की आवश्यकता होती है
  5. आपके प्रोजेक्ट को एक्शनबार शेरलॉक लाइब्रेरी की आवश्यकता है। Google- play-Services को फिर से शामिल करने या Google API के विरुद्ध बनाने की आवश्यकता नहीं है।
  6. जैसा कि ग्राहम द्वारा उल्लेख किया गया है, आपको एपीआई 7 उपकरणों के लिए समर्थन छोड़ना होगा: <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />

और यहां एक विस्तृत विवरण के लिए कुछ कोड दिया गया है:

SherlockMapFragment

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;
    }
}