Как проверить предыдущее значение в Android ViewFlipper - PullRequest
6 голосов
/ 15 декабря 2011

У меня есть восемь видов флиппера, у которых есть 4 вопроса и 4 ответа . Который отображает эти вопросы и ответы, всякий раз, когда этот конкретный видоискатель нажимается. Моя проблема заключается в том, что при первом нажатии любого видоискателя в это время ничего не нужно делать, а после нажатия на видоискатель при следующем щелчке по значению viewflipper нужно проверить, является ли оно тем же (равным) или нет. ответы должны быть 8).

Состояние:

  1. если я первый раз нажимаю Q, тогда в следующий раз нажимается другой видоискатель, у которого есть Q, ничего проверять не нужно и ничего не скрывать.

  2. если я нажму Q первый раз, то при следующем щелчке A получим значение из текстового представления Q и проверим, правильно это или нет, если оно правильно скрыть и Q и A.

  3. если я нажму А в первый раз, то при следующем щелчке Q получим значение из текстового представления А и проверим, правильно это или нет, если оно правильно скрыть и Q и A.

  4. если я нажимаю первый раз на A, то в следующий раз нажимаем другой видоискатель, у которого есть A, ничего проверять не нужно, ничего скрывать.

  5. если я первый раз нажимаю Q, тогда в следующий раз нажимается тот же видоискатель, у которого есть Q, ничего не нужно проверять, ничего не скрывать.

  6. если я нажимаю в первый раз на A, то в следующий раз при нажатии того же виджета, у которого есть A, ничего проверять не нужно, ничего не скрывать.

Итак, как проверить Текущий кликабельный ViewFlipper и Предыдущий кликнувший ViewFlipper. Я не понял, как проверить проблему.

Посмотрите на это, я думаю, моя проблема яснее.

enter image description here

Отредактировано: 16 декабря

@Override
public void onClick(View v) {

    switch (v.getId()) {
    case R.id.vf1:
        try {
            if (click) {
                Message msg = new Message();
                msg.what = 1;
                delayHandler.sendMessageDelayed(msg, DELAYTIME);

                vFilpper1.showNext();


        } catch (Exception e) {
            e.printStackTrace();
        }
        counter++;
        break;
    case R.id.vf2:
        try {
            Message msg = new Message();
            msg.what = 2;
            delayHandler.sendMessageDelayed(msg, DELAYTIME);
            Log.d("viewfilpper", "VFlipper 2");

            vFilpper2.showNext();


        } catch (Exception e) {
            e.printStackTrace();
        }
        break;
    case R.id.vf3:
        try {
            Message msg = new Message();
            msg.what = 3;
            delayHandler.sendMessageDelayed(msg, DELAYTIME);
            Log.d("viewfilpper", "VFlipper 3");
            vFilpper3.showNext();


        } catch (Exception e) {
            e.printStackTrace();
        }
        break;

    case R.id.vf4:
        try {
            Message msg = new Message();
            msg.what = 4;
            delayHandler.sendMessageDelayed(msg, DELAYTIME);
            Log.d("viewfilpper", "VFlipper 4");
            vFilpper4.showNext();

        } catch (Exception e) {
            e.printStackTrace();
        }
        break;
    case R.id.vf5:
        try {
            Message msg = new Message();
            msg.what = 5;
            delayHandler.sendMessageDelayed(msg, DELAYTIME);
            Log.d("viewfilpper", "VFlipper 5");
            vFilpper5.showNext();

        } catch (Exception e) {
            e.printStackTrace();
        }
        break;
    case R.id.vf7:
        try {
            Message msg = new Message();
            msg.what = 7;
            delayHandler.sendMessageDelayed(msg, DELAYTIME);
            Log.d("viewfilpper", "VFlipper 7");
            vFilpper7.showNext();


        } catch (Exception e) {
            e.printStackTrace();
        }
        break;
    case R.id.vf8:
        try {
            Message msg = new Message();
            msg.what = 8;
            delayHandler.sendMessageDelayed(msg, DELAYTIME);
            Log.d("viewfilpper", "VFlipper 8");
            vFilpper8.showNext();


        } catch (Exception e) {
            e.printStackTrace();
        }
        break;

Ответы [ 2 ]

3 голосов
/ 24 декабря 2011

Проблема в том, что в вашем коде отсутствует состояние ПРЕДЫДУЩЕГО выбранного ViewFlipper. Я могу предоставить только частичный код, так как я не знаю остальную часть вашего кода.

в классе, в котором есть ваш фрагмент кода, метод public void onClick (View v) {", вы хотите иметь что-то вроде этого:

public class Puzzle extends Activity{ //or whatever your class is called

    private int previousFlipperID = -1; //this stores the previous state of the flipper that was selected

    @Override
    public void onClick(View v) {
        //.... your code, but modified
            // changes
        if(previousFlipperID == -1){
            //this is the VERY FIRST CLICK, using -1 to denotate that nothing was previously selected
            previousFlipperID = v.getId();
            return;  
        }
            // end changes

        switch (v.getId()) {
        case R.id.vf1:
        try {
            if (click) {

            // changes
                switch(previousFlipperID){
                case 0: 
                    //do your logic here that you stated. note that at this point in the code
                    // you are at the point where your PREVIOUS flipper was the first flipper
                    // and your CURRENT flipper is also the first one, since v.getId() is R.id.vf1
                    break;
                case 1:  //some logic, but the CURRENT flipper is the first flipper, while PREVIOUS flipper was the second flipper
                    ...
                case 7: //the previous flipper selected was the last flipper
                    break;
                }
            // end changes

                Message msg = new Message();
                msg.what = 1;
                delayHandler.sendMessageDelayed(msg, DELAYTIME);

                vFilpper1.showNext();

        } catch (Exception e) {
            e.printStackTrace();
        }
        counter++;
        break;

        // changes
        previousFliperID = v.getId(); //update the previous flipper
        // end changes

    }
}

в моем коде, особенно ищите "// изменения". вы увидите, что я использовал целое число для хранения предыдущего флиппера. и затем способ, которым я проверяю, является ли это ПЕРВЫЙ раз, состоит в том, чтобы проверить, был ли предыдущий плавник -1 или нет. затем в конце убедитесь, что вы установили текущий идентификатор флиппера в качестве предыдущего идентификатора флиппера, чтобы в следующий раз обновить «предыдущий» идентификатор флиппера.

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

ответ - в меру моих способностей в информации, которую мне сказали (а также в меру моего понимания), поэтому я надеюсь, что это поможет.

P.S. Я чувствую себя виноватым, сказав это, но если мой ответ был правильным, пожалуйста, пожалуйста, проверьте мой ответ, потому что мне на самом деле нужны баллы за щедрость, чтобы задавать вопросы, но я не думаю, что у меня достаточно баллов. Спасибо! и счастливых праздников

0 голосов
/ 16 декабря 2011

Хорошо, у вас нет кода, который показывает, как вы переключаетесь между вашими представлениями, но здесь это происходит: когда вы включаете код при нажатии или что-либо другое, вы устанавливаете переменную-член в last = currentselected и currentselected = id выбранного виджета. Действительно просто. Ох, и в первый раз вы делаете проверку, чтобы увидеть, если это ноль. Если вы хотите, чтобы я был более точным, предоставьте код, который показывает, как вы переключаетесь между вашими взглядами.

...