TextWacher - Nekonečná smyčka – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

TextWacher - Nekonečná smyčka – Java – Fórum – Programujte.comTextWacher - Nekonečná smyčka – Java – Fórum – Programujte.com

 

Matherz0
Newbie
13. 4. 2014   #1
-
0
-

Potřeboval bych prosím poradit po několika hodinách snažení, hledání na internetu řešení jsem nenašil nic kromě toho co vím, a tuny nefungujících řešení.

Zkrátka potřeboval bych v textwatcheru v události afterTextChanged po změně textu updatovat obsah edittexu na který je textwatcher navázán. Avšak, po updatu edittextu vznikne nekonečná smyčka ( ===> Overflow), tak si musím zavést kontrolu "zpětného volání". Tu kontrolu jsem řešil hodně dlouho a hází si to písmenka které píšu do edittextu tam chce.

Zkoušel opravdu hodně řešení třeba, rekurzivní přerušení údálosti (sice fungovalo ale aplikace se hodně trhala --> Pomohlo by samostatné vlákno?)

Dále vlastnost edittextu inputtype na "TextNoSuggetion", která by měla zamezit opakovanému volání funkce. Nefunguje aneb klasická kompabilita android (To neumlovim o tom že jsem k textwatcheru přešel z toho důvodu že na událost Onkey nefunguje je SW klávesnicích.

Můj pokus o nějaký systém zabranující stackoverflow jak jsem se zmínil vstupní text si skáče sem a tam

	@Override
	public void afterTextChanged(Editable s) 
	{
		
		if(TextBox.getText().length() != prevText.length())
		{
			if(bTxTrigger)
			{
				TextBox.setText( F.Format(TextBox.getText().toString(), klicslova, barvy) );
				bTxTrigger = false;
			}else{
				bTxTrigger = true;
			}
		}else{
			bTxTrigger = false;
		}
		
	}

	
	@Override
	public void beforeTextChanged(CharSequence s, int start, int count, int after) 
	{
		prevText = TextBox.getText().toString();
	}

Android 4.2.2

Nahlásit jako SPAM
IP: 212.96.160.–
z
~ Anonymní uživatel
268 příspěvků
13. 4. 2014   #2
-
0
-

Ten kód jsem nějak nepochopil. Zabránění rekurze flagem bych si představoval nějak takhle:

{
	if (bIgnoreChange)
		return;
	...
	bIgnoreChange = true;
	...setText(...);
	bIgnoreChange = false;
}

Jako čistší řešení mi přijde ten listener odstranit, změnit text a pak listener vrátit (pokud nejde jinak dočasně vypnout).

Nahlásit jako SPAM
IP: 88.101.8.–
lukber0
Newbie
14. 4. 2014   #3
-
0
-

Příjde mi zvláštní už ten požadavek. Proč chceš měnit něco co uživatel napsal?

Nahlásit jako SPAM
IP: 213.180.55.–
Matherz0
Newbie
14. 4. 2014   #4
-
0
-

#3 lukber

Jde o to že danný text vepsaný uživatelem formátuju (měnim barvy textů dle klíčových slov, atd...).

#2 z

Už jsem skoušel přerušovat ty události, ale aplikace se strašně trhá a pozice kurzoru jde pořád na začátek. (To už jsem psal a považoval jsem to za rekurzivní přerušení, tak se omlouvám ...)

Nahlásit jako SPAM
IP: 212.96.160.–
Flowy0
Věrný člen
14. 4. 2014   #5
-
0
-

edittext je na editaciu textu ... ak to chces formatovat tak pouzi normalny textview ...

pre zaznamenanie zmeny v texte som pouzival eventy na editable (ktore je priradene k edittext) ... je s nimi priamejsia komunikacia ... pripadne si vezmi objekt ktory potrebujes a overridni jeho event a zaroven to co vyvolava event a k metode ktora to vyvolava pridaj flag system ktora zabrani volaniu (toto je dost zlozite riesenie a neodporucam)

ale vyzera ze najlepsie bude pre teba metoda void setFilters (InputFilter[] filters)

Nahlásit jako SPAM
IP: 95.103.186.–
https://github.com/Flowy
lupajz
~ Anonymní uživatel
8 příspěvků
14. 4. 2014   #6
-
0
-

#5 Flowy
Možno somarina ale : čo tak v aftertextchanged počkať povedzme sekundu a potom odobrať textwatcher  a urobiť tvoje úpravy  a po nich znova priradiť textwatcher ... 

new Handler().postDelayed(new Runnable() {
                        @Override
                        public void run() {
editText.removeTextChangedListener(TextWatcher);
                        }
                    }, 2000);
Nahlásit jako SPAM
IP: 158.193.102.–
Flowy0
Věrný člen
14. 4. 2014   #7
-
0
-

#6 lupajz
totally not the way to go

Nahlásit jako SPAM
IP: 95.103.186.–
https://github.com/Flowy
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 5 hostů

Podobná vlákna

Nekonecna smycka — založil papen

Nekonečná smyčka — založil miguel

Reklamace: Nekonečná smyčka — založil Anonymní uživatel

Nekonecna velkost — založil Tayson

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý