Visualizzazione stampabile
-
L'errore consiste nel fatto che tu stai cercando di aggiungere nel layout (SVLayout) la view (Image) all'indice 1 ma il layout non contiene nessuna altra view. Devi ricordare che l'indice parte da 0 quindi specificando 1 stai dicendo al layout di aggiungere l'immagine al secondo posto.
Il codice esatto dovrebbe essere:
codice:
SVLayout.addView(Image);
o
codice:
SVLayout.addView(Image,0);
ne caso in cui tu voglia aggiungere l'immagine sempre al primo posto ( nel caso in cui fossero presenti altre view nel layout )
Spero la memoria non mi abbia tradito :)
Se ho risolto il tuo problema ringrazia pure con il pulsantino a fine post :)
-
Quote:
Originariamente inviato da
fattazzo
L'errore consiste nel fatto che tu stai cercando di aggiungere nel layout (SVLayout) la view (Image) all'indice 1 ma il layout non contiene nessuna altra view. Devi ricordare che l'indice parte da 0 quindi specificando 1 stai dicendo al layout di aggiungere l'immagine al secondo posto.
Il codice esatto dovrebbe essere:
codice:
SVLayout.addView(Image);
o
codice:
SVLayout.addView(Image,0);
ne caso in cui tu voglia aggiungere l'immagine sempre al primo posto ( nel caso in cui fossero presenti altre view nel layout )
Spero la memoria non mi abbia tradito :)
Se ho risolto il tuo problema ringrazia pure con il pulsantino a fine post :)
Infatti ho modificato da poco e funziona.
Ovviamente sistemato un problema ne arriva un altro.
Ma se l'aggiunta di mmagini dovesse essere sequenziale come una list view come posso fare?
perchè l'ho messo in un while con indice che aumenta di volta in volta ma mi va in errore:
05-25 04:31:28.565 4730-4730/sm.winnerstatics E/AndroidRuntime: FATAL EXCEPTION: main
Process: sm.winnerstatics, PID: 4730
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
at android.view.ViewGroup.addViewInner(ViewGroup.java :3562)
at android.view.ViewGroup.addView(ViewGroup.java:3415 )
at android.view.ViewGroup.addView(ViewGroup.java:3360 )
at sm.winnerstatics.Insert$2.onClick(Insert.java:362)
at android.view.View.performClick(View.java:4438)
at android.view.View$PerformClick.run(View.java:18422 )
at android.os.Handler.handleCallback(Handler.java:733 )
at android.os.Handler.dispatchMessage(Handler.java:95 )
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.jav a:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:595)
at dalvik.system.NativeStart.main(Native Method)
-
La view dell'immagine la ricrei ogni volta nel ciclo?
Le assegni un id diverso?
Inviato dal mio Redmi Note 3 utilizzando Tapatalk
-
Quote:
Originariamente inviato da
fattazzo
La view dell'immagine la ricrei ogni volta nel ciclo?
Le assegni un id diverso?
Inviato dal mio Redmi Note 3 utilizzando Tapatalk
Questo è il cliclo fuori ci sono le impostazioni postate prima
while((line = brFile.readLine()) != null) {
SVLayout.addView(Image,IDObject);
Image.setId(IDObject);
IDObject++;
}
-
Il ciclo drovrebbe essere questo:
codice:
while((line = brFile.readLine()) != null) {
Image = XXXXXXXXXXX
RelativeLayout.LayoutParams RLayout = new RelativeLayout.LayoutParams(LinearLayout.LayoutPar ams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
Drawable b = getResources().getDrawable(R.drawable.ic_action_pr ovavalid);
Image.setImageDrawable(b);
Image.setLayoutParams(RLayout);
Image.setId(IDObject);
Image.setMaxWidth(50);
Image.setMaxHeight(50);
Image.setPadding(20,20,20,20);
SVLayout.addView(Image,IDObject);
IDObject++;
}
al posto di XXXXXXXXXXX a seconda delle tue esigenze ci va il codice per creare la view dell'immagine ( credo che il tuo caso sia quello di fare una new su ImageView ). L'importante quindi è che la view sia nuova e che tu non riusi una già aggiunta.
PS: se ricordo bene puoi usare la addView senza indice perchè inserisce già le view una dietro l'altra.
-
Quote:
Originariamente inviato da
fattazzo
Il ciclo drovrebbe essere questo:
codice:
while((line = brFile.readLine()) != null) {
Image = XXXXXXXXXXX
RelativeLayout.LayoutParams RLayout = new RelativeLayout.LayoutParams(LinearLayout.LayoutPar ams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
Drawable b = getResources().getDrawable(R.drawable.ic_action_pr ovavalid);
Image.setImageDrawable(b);
Image.setLayoutParams(RLayout);
Image.setId(IDObject);
Image.setMaxWidth(50);
Image.setMaxHeight(50);
Image.setPadding(20,20,20,20);
SVLayout.addView(Image,IDObject);
IDObject++;
}
al posto di XXXXXXXXXXX a seconda delle tue esigenze ci va il codice per creare la view dell'immagine ( credo che il tuo caso sia quello di fare una new su ImageView ). L'importante quindi è che la view sia nuova e che tu non riusi una già aggiunta.
PS: se ricordo bene puoi usare la addView senza indice perchè inserisce già le view una dietro l'altra.
iO HO MODIFICATO IL CODICE IN QUESTO MODO
//Identificativo layout,bottoni,etc che aumenta
int IDObject =0;
//ciclo while finchè non trova una riga vuota
while((line = brFile.readLine()) != null) {
//Ogni singolo valore
separated = line.split(";");
Image[IDObject] = new ImageView(Insert.this);
Image[IDObject].setImageDrawable(b);
Image[IDObject].setLayoutParams(RLayout);
Image[IDObject].setMaxWidth(50);
Image[IDObject].setMaxHeight(50);
Image[IDObject].setPadding(20,20,20,20);
//Inserisco l'immagine
SVLayout.addView(Image[IDObject]);
Image[IDObject].setId(IDObject);
//aumento ID
IDObject++;
}
Ho controlalto e il ciclo lo fa più volte. Ma penso le immagini appaiano una sopra l'altra. Ho controlalto se esistema un tipo serMarginTop, etc per caso tu hai qualche informazione in merito?
E grazie ancora :D
-
Appaiono una sopra l'altra perchè le stai aggiungendo ad un RelativeLayout
codice:
RelativeLayout SVLayout = (RelativeLayout) findViewById(R.id.LayoutLScrollView);
Prova a sostituirlo con un LinearLayout con orientamento verticale o orizzonale
-
Quote:
Originariamente inviato da
fattazzo
Appaiono una sopra l'altra perchè le stai aggiungendo ad un RelativeLayout
codice:
RelativeLayout SVLayout = (RelativeLayout) findViewById(R.id.LayoutLScrollView);
Prova a sostituirlo con un LinearLayout con orientamento verticale o orizzonale
Ora funziona ma con il linear yaoput mi si è presentato un problema... Ovvero io volevo scrivere una text view vicino all'immagine ma con questo codice mi crea sempre un linearLayout e non capisco perchè
while(eteetc)
{
//Setto parametri immagine
Image[IDObject] = new ImageView(Insert.this);
Image[IDObject].setImageDrawable(b);
Image[IDObject].setLayoutParams(RLayout);
Image[IDObject].setMaxWidth(50);
Image[IDObject].setMaxHeight(50);
Image[IDObject].setPadding(20,20,20,20);
//Inserisco l'immagine
SVLayout.addView(Image[IDObject]);
Image[IDObject].setId(IDObject);
//Setto parametri TextView
ArrayDate[IDObject] = new TextView(Insert.this);
ArrayDate[IDObject].setText(separated[1]);
ArrayDate[IDObject].setLayoutParams(RLayout);
//Inserisco la text View
SVLayout.addView(ArrayDate[IDObject]);
ArrayDate[IDObject].setId(IDObject);
Dovrebbe uscire
Immagine Data
Immagine Dat2
Immagine Data3
Grazie
-
Quello che vuoi fare mi è chiaro, diciamo che però per farlo hai fondamentalmente 2 modi:
- Aggiungere nel layout tutte le viste che ti servono in base ai dati che hai
Questo è il metodo che stai utilizzando tu ora. Il lato negativo è che per visualizzare i dati con un layout un po più complesso di una view per dato devi costruirti tutto e da codice non è una cosa proprio semplice. - Usare una ListView per visualizzare i dati
Il metodo più elegante,mantenibile e semplice.
Il RelativeLayout si va sostituire con una ListView. L'adapter della lista ha un layout che rappresenta una singola riga ( quello che per te è la image con a fianco la textview ) che in questo modo puoi costruirti graficamente da Android Studio e nel suo metodo getView vai ad avvalorare immagine e testo con i dati che hai.
Questo è il metodo preferibile in assoluto, certo è che spiegare come implementarlo nel tuo caso sarebbe un po lungo ma ho trovato se vuoi questo articolo che lo spiega in modo molto semplice.
-
Quote:
Originariamente inviato da
fattazzo
Quello che vuoi fare mi è chiaro, diciamo che però per farlo hai fondamentalmente 2 modi:
- Aggiungere nel layout tutte le viste che ti servono in base ai dati che hai
Questo è il metodo che stai utilizzando tu ora. Il lato negativo è che per visualizzare i dati con un layout un po più complesso di una view per dato devi costruirti tutto e da codice non è una cosa proprio semplice. - Usare una ListView per visualizzare i dati
Il metodo più elegante,mantenibile e semplice.
Il RelativeLayout si va sostituire con una ListView. L'adapter della lista ha un layout che rappresenta una singola riga ( quello che per te è la image con a fianco la textview ) che in questo modo puoi costruirti graficamente da Android Studio e nel suo metodo getView vai ad avvalorare immagine e testo con i dati che hai.
Questo è il metodo preferibile in assoluto, certo è che spiegare come implementarlo nel tuo caso sarebbe un po lungo ma ho trovato se vuoi questo articolo che lo spiega in modo molto semplice.
Ti ringrazio per tutto.
Sto sistemando il layout e ho capit ocome procedere.
Avevo iniziato settando delle list view ma andava sempre in errore. E da un lato preferisco mettermi 5 minuti di più a "crearmi" le list view da layout che usare classi già fatte che implementarle / fare modifiche danno spesso e volentieri errori.
Poi posso sbagliarmi :D