@Saibot12

Как при клике на элемент ListView присвоить значение переменной?

Приветствую, я пишу математическое приложение и серьёзно застрял на одном месте..
Проблема состоит в том что мне нужно, чтобы при клике на элемент ListView происходило присваивание ранее заданной переменной (znachn1) некоторого числового значения.
Алгоритм выполнения Activity состоит в следующем:
1) Инициализация действия(RadioGroup);
2) Выбор значений переменных для выбранного действия(ListView);
3) Вывод ответа на следующий Activity(Toast).
Сейчас при выборе любого элемента ListView выводится 0.0..
Как решить данную проблему?
Код MessageActivity1:
public class MessageActivity1 extends AppCompatActivity {

    TextView celzadach, poyas4, poyas5, poyas6;
    RadioGroup rgroup;
    RadioButton sravnenkr1, sravnenkr2, sravnenkr3;
    Spinner spn2;
    String prioritet[] = {"9", "8", "7", "6", "5", "4", "3", "2", "1"};
    ArrayAdapter<String> adapter2;
    double znachn1;
    Button sootnesen1;
    static double d, b;
    boolean block;
    ListView spisok1;

    @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");
        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");
        sravnenkr1.setText(message2);

        sravnenkr2 = (RadioButton) findViewById(R.id.sravnenkr2);
        Intent intent7 = getIntent();
        String message3 = intent7.getStringExtra("message3");
        sravnenkr2.setText(message3);

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

        spisok1 = (ListView) findViewById(R.id.spisokPtioritet);
        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) {
                    switch (position2) {
                        case 0:
                            znachn1 = 9;
                            break;
                        case 1:
                            znachn1 = 8;
                            break;
                        case 2:
                            znachn1 = 7;
                            break;
                        case 3:
                            znachn1 = 6;
                            break;
                        case 4:
                            znachn1 = 5;
                            break;
                        case 5:
                            znachn1 = 4;
                            break;
                        case 6:
                            znachn1 = 3;
                            break;
                        case 7:
                            znachn1 = 2;
                            break;
                        case 8:
                            znachn1 = 1;
                            break;
                    }
                }
            });
        rgroup = (RadioGroup) findViewById(R.id.RadioGroup1);
        rgroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, @IdRes int q) {
                switch (q) {
                    case R.id.sravnenkr1:
                        d = znachn1;
                        b = 1 / znachn1;
                        break;
                    case R.id.sravnenkr2:
                        b = znachn1;
                        d = 1 / znachn1;
                        break;
                    case R.id.sravnenkr3:
                        d = 1;
                        b = 1;
                        break;
                }
            }
        });

        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);
                toast1.show();
                startActivity(intent8);
            }

        });
    }
}

Код MatrixMessageActiviry123:
class MatrixMessageActiviry123 {
    static byte a = 1;
    static byte e = 1;
    static byte i = 1;
    static double w0 = d/b;

Буду очень благодарен за дельный совет, почти месяц решаю проблему, с этими значениями..
Ранее пытался выводить через Spinner, но он при запуске Activity сходу выбирал первое значение первого элемента списка, в следствии чего нарушался алгоритм, и программа работала несколько не правильно, однако, всё считала..
  • Вопрос задан
  • 488 просмотров
Решения вопроса 1
AlexMarken
@AlexMarken
Во-первых, определяй нажатую строку не по position, а параметром id. Position - позиция элемента в View (при нехватки памяти происходит пересоздание элементов адаптера во View, из-за этого в редких случаях для разных элементов параметр position может быть один и тот же), id - порядковый номер в адаптере.

Во-вторых, проблема в switch на методе onItemClick. У тебя не исполняется ни одно условие, по этому изменение значения переменной znachn1 не происходит. Поступи проще, без всяких switch (эта конструкция является дурным тоном):

@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position2, long id) {
    znachn1 = (id < 9) ? 9 - id : 0;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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