Задать вопрос
@Saibot12

Как оформить алгоритм (последовательность) выполняемых вычислений на Activity?

Здравствуйте, у меня есть некоторое Activity, посредством которого должна выполняться некоторая совокупность вычислительных операций и эти действия должны выполняться строго последовательно, под определённым алгоритмом.
Данный алгоритм должен выполняться следующий образом:
1) Инициализация действия(RadioGroup);
2) Выбор значений переменных для выбранного действия(ListView);
3) Вывод ответа на следующий Activity(Toast).
Сейчас при выполнении алгоритма выводится 0.0..
Т.к., при выполнении 1-го действия, игнорируется работа 2-го действия алгоритма, впоследствии выводится 0.0.
Однако, если выполнить сначала 2-ое действие, а потом 1-ое, приложение выводит правильный ответ.
Как можно исправить ошибку?
Код MessageActivity1:
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import static app.analysis.mai.MatrixMessageActiviry123.w0;


public class MessageActivity1 extends AppCompatActivity {

    TextView celzadach, poyas4, poyas5, poyas6;
    RadioGroup rgroup;
    RadioButton sravnenkr1, sravnenkr2, sravnenkr3;  //Объявление элементов MessageActivity1
    ListView spisok1;
    Spinner spn2;
    ArrayAdapter<String> adapter2;
    String prioritet[] = {"9", "8", "7", "6", "5", "4", "3", "2", "1"};
    double znachn1;  // Объявление переменных
    Button sootnesen1;
    static double d, b;
    boolean block;

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

        celzadach = (TextView) findViewById(R.id.celzadach);
        Intent intent5 = getIntent();
        String message1 = intent5.getStringExtra("message1"); //Перенос введенного сообщения из RememderEditText Activity1 в TextView MessageActivity1
        celzadach.setText(message1);

        poyas4 = (TextView) findViewById(R.id.poyas4);
        poyas4.setText("Определение важности критериев сравнения относительно заявленной цели:");

        poyas5 = (TextView) findViewById(R.id.poyas5);
        poyas5.setText("Какой из сравниваемых критериев более предпочтительный?");

        poyas6 = (TextView) findViewById(R.id.poyas6);
        poyas6.setText("Предпочтительней на сколько?");

        sravnenkr1 = (RadioButton) findViewById(R.id.sravnenkr1);
        Intent intent6 = getIntent();
        String message2 = intent6.getStringExtra("message2"); //Перенос введенного сообщения из RememderEditText Activity1 в RadioButton MessageActivity1
        sravnenkr1.setText(message2);

        sravnenkr2 = (RadioButton) findViewById(R.id.sravnenkr2);
        Intent intent7 = getIntent();
        String message3 = intent7.getStringExtra("message3"); //Перенос введенного сообщения из RememderEditText Activity1 в RadioButton MessageActivity1
        sravnenkr2.setText(message3);

        sravnenkr3 = (RadioButton) findViewById(R.id.sravnenkr3);
        sravnenkr3.setText("Сравниваемые критерии одинаково важны");

        rgroup = (RadioGroup) findViewById(R.id.RadioGroup1);
        rgroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, @IdRes int q) { //Обработчик событий нажатия на RadioButton, по выбору действия
                d = 1;
                b = 1;
                if (q == sravnenkr1.getId()) { //Обработка нажатия 1-го RadioButton c присвоением переменной d и b значений
                    d = znachn1;
                    b = 1 / d;
                }
                else if (q == sravnenkr2.getId()) { //Обработка нажатия 2-го RadioButton c присвоением переменной d и b значений
        b = znachn1;
        d = 1 / b;
    }
}
        }); //Возможная ошибка кроется тут, т.к. дефакто присваиваемая тут переменная znachn1=0.0, уже после её присваивания игнорируется работа другого обработчика

        spisok1 = (ListView) findViewById(R.id.spisokPrioritet);
        adapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, prioritet);
        spisok1.setAdapter(adapter2);
        spisok1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position2, long id) { //Обработчик событий нажатия на RadioButton, по выбору значения переменной znachn1 по id
                znachn1 = (id < 9) ? 9 - id : 0; //Обработка нажатия на элементы списка, где согласно условию znachn1 = (ЕСЛИ ID < 9) ТО 9 - ID ИНАЧЕ 0
            }
        });

        sootnesen1 = (Button) findViewById(R.id.sootnesen1);
        sootnesen1.setText("Далее");
        sootnesen1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                Intent intent8 = new Intent(MessageActivity1.this, MessageActivity2.class);
                Toast toast1 = Toast.makeText(getApplicationContext(),"w0="+w0, Toast.LENGTH_SHORT); // Вывод значения импортированной ранее переменной w0, посредсвом произведённого вычисления, через Toast на MessageActivity2 по нажатию на Button
                toast1.show();
                startActivity(intent8);
            }

        });

    }
}
  • Вопрос задан
  • 66 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
@red-barbarian
варианты:
1)скрывать список до тех пор пока не сделана инициализация действия
2) список не активен до тех пор пока не сделана инициализация
3) при нажатии кнопки делать проверку на правильность алгоритма работы.
4) делать визард с несколькими фрагментами с последовательностью выбора сначала действий затем списка.
и т.д.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы