2011-07-06 42 views
5

Ứng dụng của tôi có một LinearLayout bao gồm 3 Linearlayouts và mỗi bố cục tuyến tính có một Relativelayout và bố cục tuyến tính (ban đầu khả năng hiển thị của các bố cục tuyến tính này đã biến mất). Nếu bạn nhấp vào bố cục tương đối thì bố cục tuyến tính sẽ được hiển thị. Nhưng làm cách nào để làm mới toàn bộ bố cục tuyến tính sau khi nhấp vào bố cục tương đối.Cách làm mới bố cục tuyến tính theo lập trình

Code:

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

Trả lời

5

Lấy LinearLayout chứa tất cả mọi thứ. Khi bạn cần "làm mới" nó, hãy gọi invalidate. Chỉ gọi nó trong thread UI mặc dù. Nếu bạn gọi nó trong một chủ đề khác (nói hẹn giờ), hãy gọi postInvalidate. Cả hai đều làm cho phương thức của onDraw của Chế độ xem được gọi khi hệ điều hành sẵn sàng gọi.

+0

tôi đã thêm mã của mình thấy điều đó. Trong mã "LLExitDetails" là bố cục tuyến tính chính. và tôi thêm các invalidate nhưng nó không hoạt động. – naresh

+0

Điều gì sẽ xảy ra khi bạn nói "nó không hoạt động"? – DeeV

+0

không làm mới. có nghĩa là nó không hiển thị bố trí tuyến tính đầu tiên khi tôi gọi là invalidate. – naresh

0

Tôi đã dành rất nhiều thời gian để giải quyết vấn đề này. Và tôi tìm thấy một phương pháp đơn giản của refresh LinearLayout trong 3 dòng mã

Bạn phải thiết lập màu transperent trong style.xml

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

Và trong mã chỉ cần gọi để thiết lập nền

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

Nếu bạn có lệnh gọi nền có thể draw

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

Để làm mới chế độ xem theo cách đồ họa, hãy sử dụng tính năng onDraw() và tính toán lại kích thước chế độ xem và bất kỳ thứ gì liên quan đến chiều cao, chiều rộng, lề và đệm sử dụng requestLayout nó gọi onMeasure()

Các vấn đề liên quan