簡體   English   中英

如何以編程方式刷新線性布局

[英]How to refresh the linear layout programmatically

我的應用程序有一個LinearLayoutLinearLayout由 3 個Linearlayouts組成,並且每個線性布局都有一個Relativelayout和一個線性布局(最初這些線性布局的可見性消失了)。 如果單擊相對布局,則將顯示相關的線性布局。 但是點擊相對布局后如何刷新整個線性布局。

代碼:

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();
       }
    }       
};

檢索包含所有內容的 LinearLayout。 當您需要“刷新”它時,請調用invalidate 不過只能在 UI 線程中調用它。 如果您在另一個線程(例如計時器)中調用它,則調用postInvalidate 當操作系統准備好調用 View 時,兩者都會導致調用 View 的onDraw方法。

我也花了很多時間來解決這個問題。 而且我發現了一個簡單的方法,用 3 行代碼刷新 LinearLayout

您必須在 style.xml 中設置透明顏色

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

在代碼中只需調用設置背景

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

如果您有可繪制的后台調用

  ll.setBackgroundResource(R.drawable.your_drawable);

要以圖形方式刷新視圖,請使用 invalidate 調用 onDraw() 並重新計算視圖尺寸以及與高度、寬度、邊距和填充相關的任何內容,使用 requestLayout 調用 onMeasure()

linearLayout.removeAllViews();
//The again load the linearlayout view
runLinearLayout();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM