Autore Topic: Riferirsi tramite id a CustomView  (Letto 288 volte)

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 260
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    SII
  • Sistema operativo:
    Kubuntu
Riferirsi tramite id a CustomView
« il: 30 Settembre 2013, 21:02:28 CEST »
0
Ciao a tutti,
questa e' la mia situazione:
Codice (Java): [Seleziona]
public class customView extends View {
myView = new RelativeLayout(...);
//...
public customView getLayout() {
return (customView) myView;
}

public void myFunction()
{
}
}

e poi faccio:
Codice (Java): [Seleziona]
customView cv = new customView();
cv.setId(100);
// mainLayout si riferisce alla View principale
mainLayout.addView(cv.getLayout());

Il problema che mi restituisce come errore ClassCastException e' che nel momento in cui cerco di richiamare la customView neo formata non riesco!

Codice (Java): [Seleziona]
( (custonView) mainLayout.findViewById(100) ).myFunction();
Mi viene detto che non posso fare il cast di un RelativeLayout in customView.

In caso serva ai fini di aiuto, la mia customView e' rappresentata da un RelativeLayout con "funzioni aggiunte", appena istanziato infatti parte un timer nella TextView in esso contenuto.

Richiamando l'oggetto, dovrei avere la possibilita' di bloccare il timer (tutto pronto e funzionante, incorro solo in quest'errore).

Ciao e grazie :)
« Ultima modifica: 30 Settembre 2013, 21:17:59 CEST da Melanogaster »

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:Riferirsi tramite id a CustomView
« Risposta #1 il: 30 Settembre 2013, 23:44:55 CEST »
+1
Codice (Java): [Seleziona]
myView = new RelativeLayout(...);
//...
public customView getLayout() {
return (customView) myView;
}

quindi quando fai
Codice (Java): [Seleziona]
mainLayout.addView(cv.getLayout());
aggiungi a mainLayout un RelativeLayout, non l'istanza di customView (come te lo permetta di fare visto che customView estende View e non RelativeLayout mi lascia davvero perplesso, forse perché hai postato un frammento di codice che non rispecchia la reale implementazione della classe che hai fatto; così come mi lascia perplesso che riesca a recuperarlo con l'id 100).

Forse in realtà quello che volevi fare è qualcosa tipo questo?
Codice (Java): [Seleziona]
customView cv = new customView();
cv.setId(100);
// mainLayout si riferisce alla View principale
//mainLayout.addView(cv.getLayout());
mainLayout.addView(cv);

Inoltre mi sorge una domanda probabilmente dovuta al fatto che non so come intendi usare questa customView, non era più semplice usare direttamente la view customizzata all'interno del file xml di layout invece che aggiungerla programmaticamente? così puoi dargli un id nel modo consueto e non preoccuparti di impostarne uno a mano.

PS: un suggerimento stilistico, le classi per convenzione andrebbero messe con l'iniziale del nome maiuscolo per non confonderle con le variabili che per convenzione dovrebbero avere iniziale minuscola.

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 260
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    SII
  • Sistema operativo:
    Kubuntu
Re:Riferirsi tramite id a CustomView
« Risposta #2 il: 30 Settembre 2013, 23:53:05 CEST »
0
Innanzitutto, grazie per la tua risposta precisa, rispondo ai vari interrogativi che mi hai alzato:
Citazione
aggiungi a mainLayout un RelativeLayout, non l'istanza di customView (come te lo permetta di fare visto che customView estende View e non RelativeLayout mi lascia davvero perplesso, forse perché hai postato un frammento di codice che non rispecchia la reale implementazione della classe che hai fatto; così come mi lascia perplesso che riesca a recuperarlo con l'id 100).
Il frammento di codice postato corrisponde all'ultrastruttura della mia classe, ho provato a mettere al posto di View > RelativeLayout ma senza successo, penso anche io il problema sia il fatto che io aggiungo un RelativeLayout invece di un customView, comunque con l'ID 100 riesco a richiamarlo tranquillamente anche se per praticita' sto richiamando il RelativeLayout tramite un tag

Citazione
Forse in realtà quello che volevi fare è qualcosa tipo questo?
Codice (Java):
customView cv = new customView();
cv.setId(100);
// mainLayout si riferisce alla View principale
//mainLayout.addView(cv.getLayout());
mainLayout.addView(cv);
Ora provo come mi hai suggerito qui.

Purtroppo per il modo in cui ho strutturato l'app, estremamente dinamica e varia, questo era il modo piu' pulito per aggiungere la mia customView.

EDIT: ebbene, pare abbia risolto. Cio' che sbagliavo e' che nel costruttore della customView dovevo aggiungere semplicemente
Codice (Java): [Seleziona]
addView(myView)e da quel momento ho iniziato a trattare customView invece che RelativeLayout
« Ultima modifica: 01 Ottobre 2013, 00:23:46 CEST da Melanogaster »

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 260
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    SII
  • Sistema operativo:
    Kubuntu
Re:Riferirsi tramite id a CustomView
« Risposta #3 il: 01 Ottobre 2013, 00:58:49 CEST »
0
-
« Ultima modifica: 01 Ottobre 2013, 01:01:01 CEST da Melanogaster »