Android Studio - Instrukcja pod "switchem" wykonuje się dopiero po jego przełączeniu

Odpowiedz Nowy wątek
2018-12-02 14:46
0

Witam, napisałem następujący program:

package com.example.kamil.surveycalc;

import android.content.pm.ActivityInfo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;

public class azymut extends AppCompatActivity
{
    EditText xp, yp, xk, yk ;
    TextView odleglosc2, azymut2;
    Button poblicz, clear;
    Switch switch1;

    double xp1, yp1, xk1, yk1, dx, dy, d_bazy, odleglosc3, azymut3, azymut4 ;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        setContentView(R.layout.activity_azymut);

        switch1 = (Switch)findViewById(R.id.switch1);
        xp = (EditText)findViewById(R.id.xp);
        yp = (EditText)findViewById(R.id.yp);

        xk = (EditText)findViewById(R.id.xk);
        yk = (EditText)findViewById(R.id.yk);

        odleglosc2 = (TextView)findViewById(R.id.odleglosc2);
        azymut2 = (TextView)findViewById(R.id.azymut2);

        poblicz = (Button)findViewById(R.id.poblicz);
        clear = (Button)findViewById(R.id.clear);

        clear.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                String Text = xp.getText().toString();
                String Text2 = yp.getText().toString();
                String Text3 = xk.getText().toString();
                String Text4 = yk.getText().toString();
                String Text5 = odleglosc2.getText().toString();
                String Text6 = azymut2.getText().toString();

                xp.setText("");
                yp.setText("");
                xk.setText("");
                yk.setText("");
                odleglosc2.setText("0.000");
                azymut2.setText("0.0000");

            }

        });

//POCZĄTEK SWITCHA
        switch1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
            {
            if (isChecked)
                {
                    Toast.makeText(getApplicationContext(),"Grady", Toast.LENGTH_SHORT).show();
                    poblicz.setOnClickListener(new View.OnClickListener()
                    {
                        @Override
                        public void onClick(View v)
                        {

                            xp1 = Double.parseDouble(xp.getText().toString());
                            yp1 = Double.parseDouble(yp.getText().toString());
                            xk1 = Double.parseDouble(xk.getText().toString());
                            yk1 = Double.parseDouble(yk.getText().toString());

                            dx=xk1-xp1;
                            dy=yk1-yp1;
                            d_bazy = Math.sqrt(Math.pow(dx,2)+Math.pow(dy,2));

                            if ((dy>0) && (dx>0))
                            {
                                azymut3=(Math.atan((dy/dx)))*200/Math.PI;
                            }
                            else if ((dy>0) && (dx<0))
                            {
                                azymut3=200-((Math.atan((dy/dx*(-1))))*200/Math.PI);
                            }
                            else if ((dy<0) && (dx<0))
                            {
                                azymut3=200+((Math.atan((dy*(-1)/dx*(-1))))*200/Math.PI);
                            }
                            else if ((dy<0) && (dx>0))
                            {
                                azymut3=400-((Math.atan((dy*(-1)/dx)))*200/Math.PI);
                            }

                            else if((dx==0) && (dy>0))
                            {
                                azymut3=100;
                            }
                            else if((dx==0) && (dy<0))
                            {
                                azymut3=300;
                            }
                            else if((dy==0) && (dx<0))
                            {
                                azymut3=200;
                            }
                            else if((dy==0) && (dx>0))
                            {
                                azymut3=0;
                            }

                            odleglosc3 = Math.round(d_bazy*1000.0)/1000.0;
                            azymut4 = Math.round(azymut3*10000.0)/10000.0;

                            odleglosc2.setText(String.valueOf(odleglosc3));
                            azymut2.setText(String.valueOf(azymut4));

                        }
                    });

                }

                else
                    {
                        Toast.makeText(getApplicationContext(),"Stopnie", Toast.LENGTH_SHORT).show();
                        poblicz.setOnClickListener(new View.OnClickListener()
                        {
                            @Override
                            public void onClick(View v)
                            {

                                xp1 = Double.parseDouble(xp.getText().toString());
                                yp1 = Double.parseDouble(yp.getText().toString());
                                xk1 = Double.parseDouble(xk.getText().toString());
                                yk1 = Double.parseDouble(yk.getText().toString());

                                dx=xk1-xp1;
                                dy=yk1-yp1;
                                d_bazy = Math.sqrt(Math.pow(dx,2)+Math.pow(dy,2));

                                if ((dy>0) && (dx>0))
                                {
                                    azymut3=(Math.atan((dy/dx)))*180/Math.PI;
                                }
                                else if ((dy>0) && (dx<0))
                                {
                                    azymut3=180-((Math.atan((dy/dx*(-1))))*180/Math.PI);
                                }
                                else if ((dy<0) && (dx<0))
                                {
                                    azymut3=180+((Math.atan((dy*(-1)/dx*(-1))))*180/Math.PI);
                                }
                                else if ((dy<0) && (dx>0))
                                {
                                    azymut3=360-((Math.atan((dy*(-1)/dx)))*180/Math.PI);
                                }

                                else if((dx==0) && (dy>0))
                                {
                                    azymut3=90;
                                }
                                else if((dx==0) && (dy<0))
                                {
                                    azymut3=270;
                                }
                                else if((dy==0) && (dx<0))
                                {
                                    azymut3=180;
                                }
                                else if((dy==0) && (dx>0))
                                {
                                    azymut3=0;
                                }

                                odleglosc3 = Math.round(d_bazy*1000.0)/1000.0;
                                azymut4 = Math.round(azymut3*10000.0)/10000.0;

                                odleglosc2.setText(String.valueOf(odleglosc3));
                                azymut2.setText(String.valueOf(azymut4));

                            }
                        });

                    }

            }
        });
//KONIEC SWITCHA

    }
}

Program ma obliczać wartość w stopniach lub w gradach w zależności od tego czy przycisk "switch" jest włączony czy też nie. Problem polega na tym, że zadanie pod switchem wykona się dopiero po jednokrotnym jego przełączeniu. Przykład:

1) Wpisuję dane
2) Naciskam oblicz
3) Nic się nie dzieje
4) Przełączam "switcha"
5) Naciskam oblicz
6) Program zwraca wartość w gradach
7) Przełączam ponownie "switcha"
8) Program zwraca wartość w stopniach

Jak widać, oba zadania wykonały się poprawnie, jednak dopiero po jednokrotnym przełączeniu switcha. Każde następne przęłączenie również działa prawidłowo.

Korzystając z okazji dopytam o jedną rzecz. Jak zrobić, aby wynik zawsze wyświetlał mi określoną ilośc miejsc po przecinku? Korzystając z tego kodu:

 odleglosc3 = Math.round(d_bazy*1000.0)/1000.0;
 azymut4 = Math.round(azymut3*10000.0)/10000.0;

Program ucina mi wszystko po pierwszym zerze po przecinku, przykład: jeżeli wynikiem jest 54,1234 jest ok, jeżeli wynikiem jest 54,0000 program zwraca mi 54,0, chciałbym aby zawsze zwracał mi wartość z 4 cyframi po przecinku.

Z góry dziękuję za pomoc,
Pozdrawiam,
Kamil

edytowany 1x, ostatnio: k95n, 2018-12-02 14:47

Pozostało 580 znaków

2018-12-03 13:52
1

Umieściłeś kod w OnCheckedChangeListener, więc wykonuje się po wystąpieniu tego zdarzenia.


Wiedza to potęga

Pozostało 580 znaków

2018-12-03 18:41
0

A na co powinienem go zamienić?

Pozostało 580 znaków

2018-12-03 22:27
0

Sam powinieneś wiedzieć w jakiej sytuacji kod powinien się wykonać, skąd ja mam to wiedzieć? Z tego co zrozumiałem masz przycisk oblicz, zatem ten kod powinien być w raczej w onClickListener tego przycisku. Powinien tam być również if sprawdzający czy switch jest włączony.


Wiedza to potęga

Pozostało 580 znaków

2018-12-06 22:03
0

Dzięki za odpowiedź. Nie mogę się z tym jednak uporać. Chodzi mi o to, że niezależnie od pozycji switcha ma się wykonywać przycisk "oblicz". Jeżeli switch jest wyłączony to po kliknięciu "oblicz" bez potrzeby jego przełączania ma się wykonać, powiedzmy "działanie 1+1", po włączeniu switcha i kliknięciu "oblicz" ma się wykonywać "działanie 2+2". Próbowałem wrzucić kod w onClickListener ale nie wyszło ;/

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0