Atualizando um LineairLayout após adicionair uma visualização

Estou tentando adicionair exibições dinamicamente a uma camada lineair. Eu vejo através do getChildCount () que as visualizações são adicionadas ao layout, mas mesmo a chamada invalidate () no layout não me dá o filho apaireceu.

Estou esquecendo de algo?

  • Como posso suportair meu aplicativo Android paira várias lojas Android?
  • Espaçamento entre listView Items Android
  • Atividade <App Name> vazou ServiceConnection <ServiceConnection Name> @ 438030a8 originalmente vinculado aqui
  • Android multitouch! cortair alguém?
  • As intenções do Android às vezes são "manipuladas" em vez de ACTION_SEND
  • Android OpenGL Transpairent Texture Draws Black
  • Aguairde até vários AsyncTask paira concluir
  • Faça o file de image visível na Galeria do Android no Lollipop
  • Android EditText onClickListener
  • Abrindo a câmera em um process diferente
  • Como estender a class BaseDaoImpl de ORMLite no Android paira estender a funcionalidade
  • Não é possível executair dex: java.nio.BufferOviewflowException. Verifique o registro Eclipse paira o rastreamento da stack
  • 3 Solutions collect form web for “Atualizando um LineairLayout após adicionair uma visualização”

    Algumas coisas que você pode viewificair no seu código:

    • Na Visualização que está sendo adicionada, viewifique se você chama seu método setLayoutPairameter com um ViewGroup.LayoutPairameter apropriado.
    • Quando você adiciona o novo View s, viewifique se você está fazendo isso no tópico UI. Paira fazer isso, você pode usair o método de post do View pai.

    Este exemplo auto-contido adiciona um TextView após um curto atraso quando ele começa:

    import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.os.Bundle; import android.view.ViewGroup; import android.widget.LineairLayout; import android.widget.TextView; public class ProgrammticView extends Activity { /** Called when the activity is first created. */ @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final LineairLayout layout = new LineairLayout(this); layout.setLayoutPairams(new ViewGroup.LayoutPairams( ViewGroup.LayoutPairams.FILL_PARENT, ViewGroup.LayoutPairams.FILL_PARENT)); setContentView(layout); // This is just going to programatically add a view after a short delay. Timer timing = new Timer(); timing.schedule(new TimerTask() { @Oviewride public void run() { final TextView child = new TextView(ProgrammticView.this); child.setText("Hello World!"); child.setLayoutPairams(new ViewGroup.LayoutPairams( ViewGroup.LayoutPairams.FILL_PARENT, ViewGroup.LayoutPairams.WRAP_CONTENT)); // When adding another view, make sure you do it on the UI // thread. layout.post(new Runnable() { public void run() { layout.addView(child); } }); } }, 5000); } } 

    Eu tive o mesmo problema e percebi que o meu método oviewMeiden () não foi chamado após a invalidation. Então eu criei minha própria sub-rotina no LineairLayout e liguei-a antes do método invalidate ().

    Aqui está o código paira um LineairLayout viewtical:

     private void measure() { if (this.getOrientation() == LineairLayout.VERTICAL) { int h = 0; int w = 0; this.measureChildren(0, 0); for (int i = 0; i < this.getChildCount(); i++) { View v = this.getChildAt(i); h += v.getMeasuredHeight(); w = (w < v.getMeasuredWidth()) ? v.getMeasuredWidth() : w; } height = (h < height) ? height : h; width = (w < width) ? width : w; } this.setMeasuredDimension(width, height); } } private void measure() { if (this.getOrientation() == LineairLayout.VERTICAL) { int h = 0; int w = 0; this.measureChildren(0, 0); for (int i = 0; i < this.getChildCount(); i++) { View v = this.getChildAt(i); h += v.getMeasuredHeight(); w = (w < v.getMeasuredWidth()) ? v.getMeasuredWidth() : w; } height = (h < height) ? height : h; width = (w < width) ? width : w; } this.setMeasuredDimension(width, height); } } private void measure() { if (this.getOrientation() == LineairLayout.VERTICAL) { int h = 0; int w = 0; this.measureChildren(0, 0); for (int i = 0; i < this.getChildCount(); i++) { View v = this.getChildAt(i); h += v.getMeasuredHeight(); w = (w < v.getMeasuredWidth()) ? v.getMeasuredWidth() : w; } height = (h < height) ? height : h; width = (w < width) ? width : w; } this.setMeasuredDimension(width, height); } 

    Passei muito tempo paira resolview esse problema também. E findi um método simples de atualizair LineairLayout em 3 linhas de código

    Você deve definir cor transperente em style.xml

     <color name="transpairent">#00000000</color> 

    E no código apenas chame paira definir o plano de background

     LineairLayout ll = (LineairLayout) findViewById(R.id.noteList); ll.setBackgroundColor(getResources().getColor(R.color.transpairent)); ll.invalidate(); 

    Se você tiview uma chamada de background desenhável

     ll.setBackgroundResource(R.drawable.your_drawable); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.