2011-07-06 15 views
5

Mi aplicación tiene una LinearLayout que consiste en la y que cada uno tiene la disposición lineal Relativelayout y una disposición lineal (inicialmente la visibilidad de estos diseños lineales se ha ido). Si hace clic en el diseño relativo, se mostrará el diseño lineal correspondiente. Pero cómo actualizar todo el diseño lineal después de hacer clic en el diseño relativo.Cómo refrescar la disposición lineal mediante programación

Código:

private OnClickListener exit2Listener = new OnClickListener() 
{ 
    public void onClick(View v) 
    { 
     if(!exit2status) 
     { 
      if(RB_Constant.upcomingexits_obj.response.size() > 1) 
      { 
      if(RB_Constant.upcomingexits_obj.response.get(1).listRestaurants.size() > 0) 
      { 
       // Create the views on the fly instead of using the ListView 
       UpcomingResultsListViewAdapter2 rbupcadapter2 = new UpcomingResultsListViewAdapter2(RB_UpcomingExits.this); 
       int numItems2 = 0; 

       if(RB_Constant.upcomingexits_obj.response.get(1).listRestaurants.size() > 0) 
       { 
        numItems2 = RB_Constant.upcomingexits_obj.response.get(1).listRestaurants.size(); 
       } 

       //linearLayout2 
       for(int position=0; position < numItems2; position++) 
       { 
        View convertview = null; 
        convertview = rbupcadapter2.getView(position, convertview, null); 
        listLayout2.addView(convertview); 
       } 
      }    
      } 
      else 
      { 
      //toastMsg("No results!"); 
      } 
      listLayout2.setVisibility(View.VISIBLE); 
      exit2status=true; 

      if(!exit1status || exit3status || exit4status || exit5status) 
      { 
      //System.out.println("exit2 GONE"); 
      listLayout1.setVisibility(View.GONE); 
      listLayout3.setVisibility(View.GONE); 
      exit1status = false; 
      exit3status = false; 

      } 

      LLExitDetails.invalidate(); 
     } 
     else 
     { 
      System.out.println("exit2 GONE"); 
      listLayout2.setVisibility(View.GONE); 
      exit2status = false; 

      LLExitDetails.invalidate(); 
     } 
    }  
}; 

Respuesta

5

recuperar el LinearLayout que contiene todo. Cuando necesite "actualizarlo", llame al invalidate. Solo llámalo en el hilo de UI. Si lo llamas en otro hilo (digamos un temporizador), llama al postInvalidate. Ambos provocan que se llame al método onDraw de View cuando el sistema operativo está listo para llamarlo.

+0

he añadido el mi código por favor mira eso. En el código "LLExitDetails" es el diseño lineal principal. y añado la invalidación, pero no está funcionando. – naresh

+0

¿Qué sucede cuando dices "no funciona"? – DeeV

+0

no refrescante. significa que no se muestra el primer diseño lineal cuando me llaman invalidar. – naresh

0

Pasé mucho tiempo para resolver este problema también. y he encontrado un método sencillo de actualización LinearLayout en 3 líneas de código

Debe establecer el color transperent en style.xml

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

Y en el código a llamarlo para establecer fondo

LinearLayout ll = (LinearLayout) findViewById(R.id.noteList); 
    ll.setBackgroundColor(getResources().getColor(R.color.transparent)); 
    ll.invalidate(); 

Si tiene fondo dibujable llame al

ll.setBackgroundResource(R.drawable.your_drawable); 
-2
linearLayout.removeAllViews(); 
//The again load the linearlayout view 
runLinearLayout(); 
0

Para actualizar la vista como un uso gráfica de manera invalida es llamar onDraw() y para volver a calcular ver dimensiones y cualquier cosa relacionada con la altura, ancho, márgenes y utilizar el relleno requestLayout es onMeasure llamada()

Cuestiones relacionadas