Avatar
joci
Člen
Avatar
joci:

Čaute,
mám layout kde sú 4 EditText políčka a ku nim v kóde 4 onTextChanged listenery. Problém je v tom, že keď napíšem niečo do prvého políčka, vykonajú sa všetky 4 metody onTextChanged() ( zobrazené pomocou toastov ). Žiadnu chybu mi to nehádže, takže to bude len nejaká logická chyba. Vie niekto čo s tým ?

 package com.joci.dec2bin;


import android.app.*;
import android.os.*;
import android.view.*;
import android.view.KeyEvent;
import android.widget.*;
import android.view.inputmethod.EditorInfo;
import android.widget.TextView.OnEditorActionListener;
import android.widget.Toast;
import android.content.Context;
import org.xml.sax.ext.*;
import android.text.TextWatcher;
import java.lang.CharSequence;
import android.text.Editable;

public class MainActivity extends Activity
{

        long dec_number = 0;
        String bin_number = "";
        String hex_number = "";
        String oct_number = "";

        EditText dec;
        EditText bin;
        EditText hex;
        EditText oct;
//      Button convert;


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
        {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

                dec = (EditText)findViewById(R.id.dec);
            bin = (EditText)findViewById(R.id.bin);
                hex = (EditText)findViewById(R.id.hex);
                oct = (EditText)findViewById(R.id.oct);
            //convert = (Button)findViewById(R.id.convert)

           TextWatcher hex_tw = new TextWatcher() {
                @Override
                 public void onTextChanged(CharSequence s, int start, int before, int count){

                Toast.makeText(getApplicationContext(), "hex", Toast.LENGTH_SHORT).show();

                 }


                                @Override
                                public void beforeTextChanged(CharSequence s, int start, int count, int after){}

                                @Override
                                public void afterTextChanged(Editable s){}
                        };

                TextWatcher dec_tw = new TextWatcher() {
                        @Override
                        public void onTextChanged(CharSequence s, int start, int before, int count){

                        if(dec.getText().toString().equals(""))
                                dec_number = 0;
            else
                                dec_number = Long.parseLong(dec.getText().toString());


                                bin_number = Long.toBinaryString(dec_number);
                                hex_number = Long.toHexString(dec_number).toUpperCase();
                                oct_number = Long.toOctalString(dec_number);

                                if(bin_number.length()<8){
                                        for(int i = bin_number.length(); i<8; i++){
                                                bin_number = "0" + bin_number;
                                        }
                                }

                                bin.setText(bin_number);
                                hex.setText(hex_number);
                                oct.setText(oct_number);

                        }

                        @Override
                        public void beforeTextChanged(CharSequence s, int start, int count, int after){}

                        @Override
                        public void afterTextChanged(Editable s){}
                };

                TextWatcher bin_tw = new TextWatcher() {
                        @Override
                        public void onTextChanged(CharSequence sequence, int start, int before, int counter){


                                Toast.makeText(getApplicationContext(), "bin", Toast.LENGTH_SHORT).show();

                        }


                        @Override
                        public void beforeTextChanged(CharSequence s, int start, int count, int after){}

                        @Override
                        public void afterTextChanged(Editable s){}
                };

                TextWatcher oct_tw = new TextWatcher() {
                        @Override
                        public void onTextChanged(CharSequence s, int start, int before, int count){



                                Toast.makeText(getApplicationContext(), "oct", Toast.LENGTH_SHORT).show();
                        }


                        @Override
                        public void beforeTextChanged(CharSequence s, int start, int count, int after){}

                        @Override
                        public void afterTextChanged(Editable s){}
                };

        hex.addTextChangedListener(hex_tw);
        dec.addTextChangedListener(dec_tw);
        bin.addTextChangedListener(bin_tw);
        oct.addTextChangedListener(oct_tw);


                }

}
Odpovědět 10.3.2015 17:38
Svet patrí tím, ktorí sa neposerú.
Avatar
zitekv
Člen
Avatar
zitekv:

Ahoj, při nastavování textu v programu se také vyvolá změna textu políčka a tím se jednou změnou spustí všechny.
Zkus zakomentovat následující řádky v kódu,jestli je to tak jak myslím.

bin.setText(bin_number);
hex.setText(hex_number);
 oct.setText(oct_number);
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 10.3.2015 22:46
Avatar
joci
Člen
Avatar
Odpovídá na zitekv
joci:

Aha, už mi to došlo, ďakujem :D Toto ma vôbec nenapadlo :D Počítal som len s možnosťou že metoda sa vola len pri manualnej zmene textu, ale teraz som si to uvedomil :D

Nahoru Odpovědět 10.3.2015 22:59
Svet patrí tím, ktorí sa neposerú.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.