0

У меня есть это (см. Ниже) действие, в котором у меня есть панель действий с вкладками. Каждая вкладка является фрагментом. Один из фрагментов раздувается фрагментом google map v2.Как использовать фрагмент карты google с вкладками панели действий

Проблема в том, что я не могу получить объект GoogleMap из завышенного представления.

активность:

import android.app.ActionBar; 
import android.app.ActionBar.Tab; 
import android.app.Fragment; 
import android.app.FragmentTransaction; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.Button; 
import android.widget.Toast; 

import com.events.fragments.FragmentTab1; 
import com.events.fragments.MapsFragment; 
import com.events.fragments.FragmentTab3; 
import com.events.activities.R; 

public class MasterActivity extends FragmentActivity 
{ 
    // Declare Tab Variable 
    ActionBar.Tab Tab1, Tab2, Tab3; 
    Fragment fragmentTab1 = new FragmentTab1(); 
    Fragment fragmentTab2 = new MapsFragment(); 
    Fragment fragmentTab3 = new FragmentTab3(); 

    Button btn; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_master); 

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

     // Create Actionbar Tabs 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     // Set Tab Icon and Titles 
     Tab1 = actionBar.newTab().setText("tab1"); 
     Tab2 = actionBar.newTab().setText("Tab2"); 
     Tab3 = actionBar.newTab().setText("Tab3"); 

     // Set Tab Listeners 
     Tab1.setTabListener(new TabListener(fragmentTab1)); 
     Tab2.setTabListener(new TabListener(fragmentTab2)); 
     Tab3.setTabListener(new TabListener(fragmentTab3)); 

     // Add tabs to actionbar 
     actionBar.addTab(Tab1); 
     actionBar.addTab(Tab2); 
     actionBar.addTab(Tab3); 

    } 

    public class TabListener implements ActionBar.TabListener { 

     Fragment fragment; 

     public TabListener(Fragment fragment) { 
      // TODO Auto-generated constructor stub 
      this.fragment = fragment; 
     } 

     @Override 
     public void onTabSelected(Tab tab, FragmentTransaction ft) { 
      // TODO Auto-generated method stub 
      ft.replace(R.id.fragment_container, fragment); 
     } 

     @Override 
     public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
      // TODO Auto-generated method stub 
      ft.remove(fragment); 
     } 

     @Override 
     public void onTabReselected(Tab tab, FragmentTransaction ft) { 
      // TODO Auto-generated method stub 

     } 
    } 
} 

фрагмент:

import android.app.ProgressDialog; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.app.Fragment; 
import android.view.InflateException; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.AutoCompleteTextView; 
import android.widget.Toast; 

import com.events.activities.R; 
import com.events.objects.PlaceAutosuggest; 
import com.events.objects.PlaceObj; 
import com.events.si.PlacesService; 
import com.events.views.PlacesAutoSuggAdapter; 
import com.google.android.gms.maps.CameraUpdate; 
import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.LatLng; 

public class MapsFragment extends Fragment 
{ 
    View rootView; 
    GoogleMap map; 

    AutoCompleteTextView addressInput; 
    ProgressDialog progressDialog; 

    FindMapLocationTask findMapLocationTask; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 

     if (rootView != null) 
     { 
      ViewGroup parent = (ViewGroup) rootView.getParent(); 
      if (parent != null) 
       parent.removeView(rootView); 
     } 
     try 
     { 
      rootView = inflater.inflate(R.layout.map_frag, container, false); 
     } 
     catch (InflateException e) 
     { 
      return rootView; 
     } 

     addressInput = (AutoCompleteTextView) rootView.findViewById(R.id.map_frag_location_AutoCompleteTextView); 
     map = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map_frag_map_fragment)).getMap(); 

     addressInput.setAdapter(new PlacesAutoSuggAdapter(getActivity())); 
     addressInput.setOnItemClickListener(new OnItemClickListener() 
     { 

      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) 
      { 
       PlaceAutosuggest place = (PlaceAutosuggest) adapterView.getItemAtPosition(position); 
       addressInput.setText(place.getName()); 

       findMapLocationTask = new FindMapLocationTask(); 
       findMapLocationTask.execute(place.getReferance()); 

       //Toast.makeText(getActivity(), place.getReferance(), Toast.LENGTH_LONG).show(); 
      } 
     }); 

     return rootView; 
    } 

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

XML макета map_frag:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <AutoCompleteTextView 
     android:id="@+id/map_frag_location_AutoCompleteTextView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:ems="10" > 

     <requestFocus /> 
    </AutoCompleteTextView> 

    <fragment 
     android:id="@+id/map_frag_map_fragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@+id/map_frag_location_AutoCompleteTextView" 
     android:layout_alignParentLeft="true" 
     class="com.google.android.gms.maps.SupportMapFragment" /> 

</RelativeLayout> 

Сейчас в фрагменте MapFragment в map = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map_frag_map_fragment)).getMap(); (Cannot cast from Fragment to SupportMapFragment). Теперь я попытался изменить это: android.app.Fragment; - android.app.support.v4.Fragment;, но это вызвало ошибки в MasterActivity. Как мне это решить?

+0

простого способа сделать это http://stackoverflow.com/questions/17820880/getting-google-map-fragment-in-oncreateview-using-actionbar-tabs – guardezi

ответ

4

Ваша основная проблема заключается в том, что вы смешиваете различные типы фрагментов из разных библиотек.

Если вы используете SupportMapFragment, вы не можете использовать android.app.Fragment, и ему необходимо использовать android.app.support.v4.Fragment. Если вы используете ошибки gatting при замене на использование фрагмента поддержки, просто исправьте их, и это, вероятно, также связано с вашими смесями классов.

следующая проблема состоит в том, что MapsFragment должна быть MapFragment или SupportMapFragment это не может быть просто Fragment

, если вы используете собственные фрагменты вам не нужно использовать FragmentActivity и вы можете использовать только регулярные Activity, а затем использовать MapFragment

подытожить, когда вы используете что-то из одной библиотеки вы должны придерживаться этой библиотеки, и вы не можете смешивать собственные фрагменты с фрагментами поддержки

+0

Я хотел бы придерживаться MapFragment (если он поддерживается android.app.Fragment), как я это делаю? – vlio20

+0

это то же самое, что и у вас родные фрагменты. почему вы используете фрагменты поддержки, если у вас есть собственные фрагменты (если вы не нацелены на что-то вроде пряников) – tyczj

+0

, вероятно, вам стоит посмотреть документацию https://developers.google.com/maps/documentation/android/start#getting_the_google_maps_android_api_v2 – tyczj

Смежные вопросы