java - Add a view in a method outside onCreate -


i'm trying add textview dinamically when call disegnamessaggio(string mesaggio) method. method called when button tapped.

the textview not appear.

this method disegnamessaggio:

public void disegnamessaggio(string messaggio){     textview textview=new textview(getcontext());     viewgroup.layoutparams lp=new viewgroup.layoutparams(layoutparams.wrap_content,layoutparams.wrap_content);     textview.settext(messaggio);     textview.settextcolor(color.red);     textview.settextsize(20);     textview.setx(this.getheight()/2);     textview.sety(this.getwidth()/2);     this.addview(textview,lp); } 

i have seen questions not works me:

after oncreate: add view , remove upon buttonclick

add view outside of oncreate in android

in addition, add other view in other method in same class, method called in oncreate.

this complete code:

mainactivity class:

package com.example.user.prima_app;  import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.view.view; import android.view.viewgroup; import android.widget.textview; import android.widget.button; import android.widget.linearlayout; import android.view.viewgroup.layoutparams; import android.view.viewgroup.marginlayoutparams; import android.view.menu; import android.view.menuitem; import android.view.menuinflater;  import org.w3c.dom.text;  public class mainactivity extends appcompatactivity {        @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_main);         linearlayout layout=(linearlayout) findviewbyid(r.id.layout);          partita.creagriglia(this);         partita.nuovapartita();         layout.addview(partita.griglia);     }      @override     public boolean oncreateoptionsmenu(menu menu)     {         menuinflater inflater=getmenuinflater();         inflater.inflate(r.menu.main,menu);         return true;     }      @override     public boolean onoptionsitemselected(menuitem item)     {         int id=item.getitemid();         switch(id)         {             case r.id.reset:                 partita.nuovapartita();         }         return false;     }   } 

partita class:

package com.example.user.prima_app;  /**  * created user on 04/07/2017.  */  import android.content.context;  public class partita {     public static griglia griglia;     public static int larghezza=10;     public static int altezza=10;     public static int nmine=15;     public static context context;      public static boolean finepartita=false;      public static void creagriglia(context cont){         context=cont;         griglia=new griglia(cont);     }      public static void nuovapartita(){         finepartita=false;         griglia.svuotagriglia();         griglia.creagriglia(larghezza,altezza,nmine,50);         griglia.partitaincorso=true;     }      public static void finepartita(){         finepartita=true;         griglia.partitaincorso=false;         griglia.disegnamessaggio("hai perso");         //this call disegnamessaggio     }  } 

griglia class:

package com.example.user.prima_app;  import android.graphics.color; import android.view.view; import android.content.context; import android.util.attributeset; import android.view.viewgroup; import android.widget.textview; import android.graphics.rect; import android.util.log; import java.util.random; import java.util.list; import java.util.arraylist;  /**  * created user on 18/05/2017.  */ public class griglia extends viewgroup {     public quadratino[][] griglia;//quadratino[x][y]     private int larg=10;     private int alt=10;     private int lato=25;     public boolean partitaincorso;     public griglia(context cont,attributeset as) {         super(cont, as);     }     public griglia(context cont){ super(cont); }      public void creagriglia(int larghezza,int altezza,int nmine,int lato1){         larg=larghezza;         alt=altezza;         lato=lato1;         quadratino quadratino;         viewgroup.layoutparams lp=new viewgroup.layoutparams(lato,lato);         quadratino.setlato(lato);         quadratino.setgriglia(this);         griglia=new quadratino[larghezza][altezza];         boolean campomine[][]=campomine(nmine);         int camponumeri[][]=generanumeretti(campomine);          for(int l=0;l<larghezza;l++){             for(int a=0;a<alt;a++){                 quadratino=new quadratino(camponumeri[l][a],campomine[l][a],l,a,getcontext());                 griglia[l][a]=quadratino;                 addview(quadratino,lp);             }         }     }      public void svuotagriglia(){         this.removeallviews();         griglia=null;     }      private boolean[][] campomine(int nmine){         int i=0;         boolean campomine[][]=new boolean[larg][alt];         random random=new random();         int x;         int y;         while(i<nmine){             x=random.nextint(larg);             y=random.nextint(alt);             if(!campomine[x][y]){                 campomine[x][y]=true;                 i++;             }         }         return campomine;     }      private int[][] generanumeretti(boolean campomine[][]){         if(larg<1)             return new int[0][0];         int numeretti[][]=new int[larg][alt];          for(int i=0;i<larg;i++){             for(int j=0;j<alt;j++){                 if(campomine[i][j]){                     aggiungi1intorno(numeretti,campomine,i,j);                 }             }         }         return numeretti;     }       public void propagaclick(quadratino quadratino){         log.d("propagaclick","propagato il quadratino alla x:"+quadratino.posizionex+" e alla y:"+quadratino.posizioney+" con numero:"+quadratino.numeretto+" e con bomba:"+quadratino.bomba);          if(!partitaincorso)             return;          if(quadratino.bomba) {             quadratino.cliccato=true;             quadratino.invalidate();             partita.finepartita();         }          list<quadratino> interessati=new arraylist<quadratino>();         interessati.add(griglia[quadratino.posizionex][quadratino.posizioney]);         for(int i=0;i<interessati.size();i++){             interessati.get(i).cliccato=true;             interessati.get(i).invalidate();             if(interessati.get(i).numeretto==0 && !interessati.get(i).bomba){                 aggiungiallalista(interessati,i);             }         }     }       private int[][] aggiungi1intorno(int numeretti[][],boolean campomine[][],int x,int y){         if(x>0){             if(!campomine[x-1][y])numeretti[x-1][y]++;             if(y>0) {                 if(!campomine[x-1][y-1])numeretti[x-1][y-1]++;             }             if(y<alt-1) {                 if(!campomine[x-1][y+1])numeretti[x-1][y+1]++;             }         }         if(x<larg-1){             if(!campomine[x+1][y])numeretti[x+1][y]++;             if(y<alt-1){                 if(!campomine[x+1][y+1]) numeretti[x+1][y+1]++;             }             if(y>0){                 if(!campomine[x+1][y-1])numeretti[x+1][y-1]++;             }         }         if(y>0){             if(!campomine[x][y-1])numeretti[x][y-1]++;         }         if(y<alt-1){             if(!campomine[x][y+1])numeretti[x][y+1]++;         }         return numeretti;     }      private list<quadratino> aggiungiallalista(list<quadratino> interessati,int n){         int x=interessati.get(n).posizionex;         int y=interessati.get(n).posizioney;         if(x>0){             if(!interessati.contains(griglia[x-1][y]))                 interessati.add(griglia[x-1][y]);             if(y>0) {                 if(!interessati.contains(griglia[x-1][y-1]))                     interessati.add(griglia[x-1][y-1]);             }             if(y<alt-1) {                 if(!interessati.contains(griglia[x-1][y+1]))                     interessati.add(griglia[x-1][y+1]);             }         }         if(x<larg-1){             if(!interessati.contains(griglia[x+1][y]))                 interessati.add(griglia[x+1][y]);             if(y<alt-1){                 if(!interessati.contains(griglia[x+1][y+1]))                     interessati.add(griglia[x+1][y+1]);             }             if(y>0){                 if(!interessati.contains(griglia[x+1][y-1]))                     interessati.add(griglia[x+1][y-1]);             }         }         if(y>0){             if(!interessati.contains(griglia[x][y-1]))                 interessati.add(griglia[x][y-1]);         }         if(y<alt-1){             if(!interessati.contains(griglia[x][y+1]))                 interessati.add(griglia[x][y+1]);         }         return interessati;     }      public void disegnamessaggio(string messaggio){//<------------ disegnamessaggio         textview textview=new textview(cont);         viewgroup.layoutparams lp=new viewgroup.layoutparams(layoutparams.wrap_content,layoutparams.wrap_content);         textview.settext(messaggio);         textview.settextcolor(color.red);         textview.settextsize(20);         textview.setx(this.getheight()/2);         textview.sety(this.getwidth()/2);         this.addview(textview,lp);     }      @override     public void onmeasure(int largmisura,int altmisura){         super.onmeasure(largmisura,altmisura);         int latospec=measurespec.makemeasurespec(lato,measurespec.exactly);         for(int l=0;l<larg;l++){             for(int a=0;a<alt;a++){                 griglia[l][a].measure(latospec,latospec);             }         }     }      @override     public void onlayout(boolean cambiato,int sin,int sopra,int dest,int sotto){         int x1;         int y1;         int x2;         int y2;         for(int l=0;l<larg;l++){             x1=(l*lato)+1;             x2=(l+1)*lato;             for(int a=0;a<alt;a++){                 y1=(a*lato)+1;                 y2=(a+1)*lato;                 griglia[l][a].layout(x1,y1,x2,y2);             }         }     } } 

quadratino class:

package com.example.user.prima_app;  import android.view.view; import android.content.context; import android.util.attributeset; import android.graphics.paint; import android.graphics.canvas; import android.graphics.color; import android.graphics.rect; import android.graphics.bitmap; import android.graphics.picture;  public class quadratino extends view {     public int numeretto;     public boolean cliccato;     public boolean bomba;     public int posizionex;     public int posizioney;     public static griglia griglia;     private static paint paintnum;     private static paint paintbomba;     private static paint paintlato;     private static paint paintsfondo;     private static rect rettangolo;     private static rect rettangololato;     private static final int contornoquadratino=2;     private static int lato;     public static int grandezzatesto=25;      static{         paintnum=new paint();         paintlato=new paint();         paintsfondo=new paint();         paintbomba=new paint();         paintnum.setcolor(color.black);         paintnum.settextsize(grandezzatesto);         paintnum.settextalign(paint.align.center);         paintbomba.setcolor(color.red);         paintbomba.settextsize(grandezzatesto);         paintbomba.settextalign(paint.align.center);         paintlato.setcolor(color.gray);         paintlato.setstyle(paint.style.stroke);         paintlato.setstrokewidth(contornoquadratino);         paintsfondo.setcolor(color.ltgray);     }     public static void setlato(int lato1){         lato=lato1;         rettangolo=new rect(0,0,lato,lato);         rettangololato=new rect(0,0,lato,lato);     }     public static void setgriglia(griglia griglia1){         griglia=griglia1;     }     public quadratino(context cont, attributeset attr) {         super(cont, attr);         numeretto=0;         cliccato=false;         bomba=false;         rettangolo=new rect(0,0,50,50);         rettangololato=new rect(0,0,50,50);         this.setonclicklistener(new view.onclicklistener(){             public void onclick(view view){                 quadratino quadratino=(quadratino)view;                 quadratino.cliccato=true;                 quadratino.invalidate();                 quadratino.griglia.propagaclick(quadratino);             }          });     }     public quadratino(int num,int x,int y,context cont){         this(num,false,false,x,y,cont);     }     public quadratino(int num,boolean bomba,int x,int y,context cont){         this(num,bomba,false,x,y,cont);     }     public quadratino(int num,boolean bomba,boolean cliccato,int x,int y,context cont){         super(cont);         numeretto=num;         this.cliccato=cliccato;         this.bomba=bomba;         posizionex=x;         posizioney=y;         this.setonclicklistener(new view.onclicklistener(){             public void onclick(view view){                 quadratino quadratino=(quadratino)view;                 quadratino.griglia.propagaclick(quadratino);             }          });     }      @override     protected void ondraw(canvas canvas){         super.ondraw(canvas);         canvas.drawrect(rettangolo,paintsfondo);         canvas.drawrect(rettangololato,paintlato);         if(cliccato) {             if(!bomba) {                 canvas.drawtext(integer.tostring(numeretto), lato / 2, lato - (grandezzatesto / 2), paintnum);              }             else                 canvas.drawtext("b", lato / 2, lato - (grandezzatesto / 2), paintbomba);          }     } } 

when tap quadratino view, in click listener, call method propagaclick of griglia class.

propagaclick call finepartita method of partita class call disegnamessaggio.

thanks patience.

in oncreate should have line inflates root layout of activity (or layout want add view to)

parentlayout = getlayoutinflater().inflate(r.layout.activity_main,null); 

then in other method,

public void disegnamessaggio(string messaggio){     textview textview=new textview(getcontext());     viewgroup.layoutparams lp=new viewgroup.layoutparams(layoutparams.wrap_content,layoutparams.wrap_content);     textview.settext(messaggio);     textview.settextcolor(color.red);     textview.settextsize(20);     textview.setx(this.getheight()/2);     textview.sety(this.getwidth()/2);     //this.addview(textview,lp);     parentlayout.addview(textview,lp); } 

Comments

Popular posts from this blog

node.js - Node js - Trying to send POST request, but it is not loading javascript content -

javascript - Replicate keyboard event with html button -

javascript - Web audio api 5.1 surround example not working in firefox -