Diskuze: Vstup textu v CanvasView
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Opakovaně prosím o nějakou radu. Zkoušel jsem to i na fóru stackoverflow.com, ale ani tam mi zatím nikdo neporadil. Sice jeden pokus o radu přišel, ale bohužel nepoužitelný. Snad se najde někdo tady v Česku, vždyť jsme národ programátorů ! Prosím ! Jinak se nehnu z místa.
Nějak zvláštně tam inicializuješ to edText, měl bys ho IMHO inicializovat stejně jako ten customCanvas v Activity_Pohyb
//místo
edText.findViewById(editText); //které ti způsobuje chybu
// by tuším mělo být
edText = (EditText) findViewById(R.id.editText);
Díky za radu. Opravil jsem inicializaci podle ní. Chybu to sice nehlásí, ale aplikace se bohužel opět zastaví s hláškou: "Unfortunately, Pohyb_Prvku has stoped." na řádku:
Toast.makeText(context,"Název je "+edText.getText().toString(), Toast.LENGTH_SHORT).show();
Takže to zase nedokáže přečíst, co jsem zadal do EditTextu.
Čím víc na to koukám, tím míň jistý si jsem, že chápu o co se snažíš Nejsou mi jasné tyto věci:
K Tým dotazům: nejdřív ten druhý - aplikace vznikla na základě tohoto
příkladu: https://examples.javacodegeeks.com/…vas-example/
Proto je ovládání založeno na metodě onTouchEvent pomocí souřadnic x a y
displeje.
A co se týče toho druhého - přesunul jsem zadání názvu do Activity_Pohyb, a to tak, že jsem inicializoval Button buttUloz, EditText eText a TextView tView a vytvořil metodu getNazev k načtení názvu z CanvasView.
eText = (EditText) findViewById(R.id.editText);
tView = (TextView) findViewById(R.id.textView);
buttUloz = (Button) findViewById(R.id.bUloz);
}
public void ulozNazev(View v) {
if (eText.getVisibility() == INVISIBLE) {
eText.setVisibility(VISIBLE);
buttUloz.setText("potvrď.");
}
else {
eText.setVisibility(INVISIBLE);
buttUloz.setText("ULOŽ");
nazev = eText.getText().toString();
tView.setText(nazev);
customCanvas.ulozNazev();
}
}
public String getNazev() {
return nazev;
}
V CanvasView jsem vytvořil proměnnou mActivityPohyb třídy Activity_Pohyb,
private final Activity_Pohyb mActivityPohyb;
a v konstruktoru ji inicializoval
mActivityPohyb = new Activity_Pohyb();
abych se pomocí mMainActivity.getNazev() dostal k názvu souboru zadanému v MainActivity.
Takže po dotyku na tlačítko "ULOŽ" se zobrazí EditText s výzvou "Napiš název a" popis tlačítka se změní na "potvrď". Když se napíše název souboru a stiskne tlačítko "potvrď", měl by se pak soubor uložit pod zadaným názvem. V textView tView se skutečně zobrazí zadaný název (pro kontrolu), ale jak mi napíše Toast v CanvasView, soubor se uloží pod názvem "null", což znamená, že název se do CanvasView nepřenesl. (Vlastní uložení pod zadaným názvem souboru není ještě napsané - zatím se jen marně pokouším dostat k tomu názvu.)
Abys to mohl případně sám vyzkoušet, posílám Ti v soukromé zprávě
drasticky ořezanou aplikaci (bez vykreslování a ovládání prvků i bez
ukládání a načítání souboru - to všechno teď dělám v CanvasView).
Všechno co potřebuji je zadat název souboru a pod tímto názvem uložit
soubor a pak zase zobrazit seznam uložených souborů, jeden zvolit a načíst
ho.
Zkoušel jsem i intent, ale nepodařilo si mi to, napsalo to
hlášku:"Non-static variable cannot be referenced from a static context" a dál
už jsem nevěděl co s tím.
Omluvám se za velmi pozdní odpověď, ale znáš to - Vánoce Vidím tam hned jeden velký problém a sice:
mActivityPohyb = new Activity_Pohyb();
tím přece vytvoříš úplně novou instanci třídy Activity_Pohyb, která nemá s tou původní nic společného. Takže nemůžeš čekat, že EditText v této nové instanci bude něco obsahovat.
Že ti tohle uniklo mne přivádí na myšlenku, že si nejsi ještě tak úplně jistý co se týče objektově orientovaného programování, takže bych ti poradil nejprve si to pořádně projít, <a href='https://www.itnetwork.cz/java/oop'>místní tutoriály</a> jsou velmi solidní a pak teprve se pouštět do psaní aplikace.
Ahoj Atramente,
pozdě, ale přece odepisuji. Tvůj podnět mne zaujal, i když přímo můj
problém nevyřešil. I tak díky. Nakonec jsem to vyřešil úplně jinak.
Vytvořil jsem si přímo ve třídě CanvasView jednak jednoduchou klávesnici
pro zadávání názvu souboru k uložení, jednak scrollovací seznam pro
výběr souboru k načtení. Funguje to perfektně.
Zobrazeno 8 zpráv z 8.