Я разрабатываю приложение для Android, которое определяет местоположение пользователя и отображает точки вокруг него в определенном радиусе на карте. Радиус жестко запрограммирован на 30 миль. Я использую этот радиус для вызова API на свой сервер, который дает мне точки для построения графика. Таким образом, радиус здесь может быть строкой (например, «10», «15», «20» и т. д.)
Я пытаюсь добавить к нему функциональность настроек, чтобы пользователь мог изменить радиус. Я реализую alertDialog, в котором буду отображать различные параметры радиуса.
Если пользователь выбирает радиус из доступных, приложение должно перезагрузиться с использованием выбранного радиуса. Ниже приведен код.
Проблема, с которой я сталкиваюсь, заключается в том, что активность не перезагружается. Приложение работает нормально, без каких-либо ошибок, но когда я захожу в настройки и нажимаю на радиус, оно не перезагружает активность. Диалог предупреждений закрывается, но ничего не происходит.
Примечание: я удалил объявленные переменные и другие функции из исходного кода и записал только ту часть, которая не работает. Я попытался вызвать метод onCreate, но это не сработало. Я попытался использовать намерение перезагрузить активность, как показано ниже, но даже это не сработало.
//This class implements OnMyLocationChangeListener that is used to
//display the user's current location on the map
public class HotspotScreen extends ActionBarActivity implements OnMyLocationChangeListener{
//varibles of the application declared here
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hotspot_screen);
// I plan to reload the activity by sending the radius string to the activity
// and then use it to load the activity using the selected radius
// following is to see if radius is sent while reloading the activity
//if yes, using the radius selected.
Intent intent = getIntent();
if (intent.getStringExtra("start") != null){
radius = intent.getStringExtra("start");
}
Toast.makeText(this, "Radius: "+radius, Toast.LENGTH_LONG).show();
//this is my function to setup the map
setUpMapIfNeeded();
}
// following is the code to pop up the alertdialog which gives a list of
// values for radius for the user to choose.
@Override
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.hotspot_screen_settings, menu);
return super.onCreateOptionsMenu(menu);
//return true;
}
public boolean onOptionsItemSelected(MenuItem item){
super.onOptionsItemSelected(item);
switch (item.getItemId()){
case R.id.settings:
settingsMenuItem();
break;
}
return true;
}
private void settingsMenuItem() {
String[] radius_list = {"10", "15", "20", "25", "30", "35", "40", "45" ,"50"};
new AlertDialog.Builder(this)
.setTitle("Change radius")
.setItems(radius_list, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
switch(which){
case 10:
Intent i = new Intent(HotspotScreen.this, HotspotScreen.class);
i.putExtra("radius", "10");
startActivityForResult(i, 0);
HotspotScreen.this.finish();
//HotspotScreen.this.onCreate(null);
break;
case 15:
Intent i = new Intent(HotspotScreen.this, HotspotScreen.class);
i.putExtra("radius", "15");
startActivityForResult(i, 0);
HotspotScreen.this.finish();
//HotspotScreen.this.onCreate(null);
break;
case 20:
Intent i = new Intent(HotspotScreen.this, HotspotScreen.class);
i.putExtra("radius", "20");
startActivityForResult(i, 0);
HotspotScreen.this.finish();
//HotspotScreen.this.onCreate(null);
break;
}
}
})
.show();
}
Заранее спасибо :)