2014-01-30 66 views
0

來自MapFragment的內容我想顯示某種設置窗口。什麼是最好的方式來做到這一點? 替換片段?創建某種疊加視圖? AlertDialog?來自MapFragment的顯示設置窗口

我該如何最好地實現它?

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

感謝

+0

我把按鈕ActionBar中,如果您的應用程序有。設置頁面,或者你稱之爲的,將是一個PreferenceActivity。 – cYrixmorten

回答

0

把設置在動作條從按鈕激活diaglog片段有一個接口,這樣你就可以更新背景地圖。

看到這個活在我的應用程序

按鈕在操作欄中。

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

完整的mapsettings類。

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

好運 Danny117