Nano Hash - криптовалюты, майнинг, программирование

Получите выбранное значение из alertDialog и перезагрузите активность в Android, используя выбранное значение

Я разрабатываю приложение для 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();
}

Заранее спасибо :)


  • В любом случае вам нужно закрыть диалоговое окно и вызвать функцию, с помощью которой вы перезагружаете содержимое действия. 02.05.2015

Ответы:


1

Проблема в том, что значение which в методе onClick не означает значение вашего радиуса, это позиция элемента, на который нажали. Поэтому постарайтесь:

switch(radius_list[which]){
    case "10":...
    case "15":...
}

И лично я думаю, что вам не нужно перезагружать активность для этого случая, вы можете просто установить радиус в блоке переключателя и снова вызвать setUpIfNeeded, чтобы внести изменения в представление.

02.05.2015
  • Большое спасибо, это решило проблему, и я тоже последовал вашему совету. Это очень упрощает выполнение. Большое спасибо :) 02.05.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..