2014-01-30 4 views
0

изнутри MapFragment Я бы хотел отобразить окно настроек. Какой был бы лучший способ сделать это? Заменить фрагмент? Создать какое-то наложение? AlertDialog?Окно настроек экрана из MapFragment

Как бы я мог наилучшим образом реализовать его?

btn.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     //... 
    } 
}); 

Благодаря

+0

Я бы поставил кнопку в ActionBar, если ваше приложение имеет это. Страница настроек или то, что вы назовете им, будет PreferenceActivity. – cYrixmorten

ответ

0

Помещенным настройки в diaglog фрагмента активированного от кнопки в ActionBar имеет интерфейс, так что вы можете обновить карту в фоновом режиме.

Смотреть это жить в моем приложении

кнопку в панели действий.

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:yourapp="http://schemas.android.com/apk/res-auto" > 

<item 
    android:id="@+id/action_settings" 
    android:icon="@drawable/action_settings" 
    android:orderInCategory="100" 
    android:title="@string/action_settings" 
    android:showAsAction="always" 
    yourapp:showAsAction="always"/> 

Обработать нажатие кнопки

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    int x = item.getItemId(); 
    switch (x) { 
    case R.id.action_settings: 
     showSettingsDialog(); 
     return true; 

сделать что-то полезное показать объект фрагмента.

private void showSettingsDialog() { 
    FragmentManager fm = getSupportFragmentManager(); 
    MapSettings editSettingsDialog = new MapSettings(); 
    editSettingsDialog.show(fm, "fragment_edit_name"); 
} 

Полный класс комплектации.

public class MapSettings extends DialogFragment implements 
    OnCheckedChangeListener { 

    public static final String MAP_TYPE = "com.gosylvester.bestrides.settings.maptype"; 
BestRidesSettingsDialogListener activity; 
SharedPreferences sharedpref; 

public interface BestRidesSettingsDialogListener { 
    void onMapSettingsChange(int mapType); 
} 

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

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

    // the activity may be null if this is called without implementing the 
    // BestRidesSettingsDialogListener (The settings object saves the 
    // setting so the 
    // call back may not be needed. 

    activity = (BestRidesSettingsDialogListener) getActivity(); 

    getDialog().setTitle(R.string.app_name); 
    View view = inflater.inflate(R.layout.activity_map_settings, container); 
    RadioGroup rg = (RadioGroup) view.findViewById(R.id.radioGroup1); 
    // initialize to the shared preferences value 
    rg.clearCheck(); 

... homemade glue to get the initial setting.  
GoPreferences.getInt(getActivity(),MAP_TYPE,GoogleMap.MAP_TYPE_NORMAL); 

    RadioButton rb = null; 

    switch (x) { 
    case GoogleMap.MAP_TYPE_HYBRID: 
     rb = (RadioButton) view.findViewById(R.id.RDOHybrid); 
     rb.setChecked(true); 
     break; 
    case GoogleMap.MAP_TYPE_NORMAL: 
     rb = (RadioButton) view.findViewById(R.id.RDORoad); 
     rb.setChecked(true); 
     break; 
    case GoogleMap.MAP_TYPE_SATELLITE: 
     rb = (RadioButton) view.findViewById(R.id.RDOSatelite); 
     rb.setChecked(true); 
     break; 
    case GoogleMap.MAP_TYPE_TERRAIN: 
     rb = (RadioButton) view.findViewById(R.id.RDOTerrain); 
     rb.setChecked(true); 
     break; 
    } 
    // set the listener after setting up 
    rg.setOnCheckedChangeListener(this); 
    return view; 
} 

@Override 
public void onCheckedChanged(RadioGroup rg, int checkId) { 
    // TODO Auto-generated method stub 
    int mapType = 0; 
    switch (checkId) { 
    case R.id.RDORoad: 
     mapType = GoogleMap.MAP_TYPE_NORMAL; 
     break; 
    case R.id.RDOHybrid: 
     mapType = GoogleMap.MAP_TYPE_HYBRID; 
     break; 
    case R.id.RDOSatelite: 
     mapType = GoogleMap.MAP_TYPE_SATELLITE; 
     break; 
    case R.id.RDOTerrain: 
     mapType = GoogleMap.MAP_TYPE_TERRAIN; 
     break; 
    } 
    // run the activity onchange 
    // if the activity is null there is no listener to take action on the 
    // settings 
    if (activity != null) { 
     activity.onMapSettingsChange(mapType); 
    } 

    // save the settings 


} 

Иммунитет интерфейс на активность вашей карты, чтобы карта могла быть изменена из фрагмента диалога.

public class KmlReader extends ActionBarActivity implements 
    BestRidesSettingsDialogListener, SnapshotReadyCallback, 
    OnMapLoadedCallback { 



@Override 
public void onMapSettingsChange(int mapType) { 
    // TODO Auto-generated method stub 
    if (mMap != null) { 
     mMap.setMapType(mapType); 
    } 
} 

Good Luck Danny117

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