2013-05-07 8 views
7

Tôi đã thấy một số tiện ích con sử dụng addView và đôi khi addViewInLayout.Sự khác biệt giữa addView và addViewInLayout

Sự khác nhau giữa chúng là gì? Điều gì sẽ xảy ra nếu tôi thay thế cái này bằng cái kia?

Tôi có nên giữ cờ trong khi bố cục và sử dụng "addViewInLayout" hoặc "addView" cho phù hợp không?

Cảm ơn.

BR, Henry

ps. thêm thẻ: removeview, removeviewinlayout

Trả lời

15

của nó thường là một ý tưởng tồi để gọi addView bên onLayoutaddView nội bộ gây nên một requestLayout mà cuối cùng sẽ gọi onLayout. Vì vậy, bạn kết thúc kích hoạt bố cục trong khi bạn đang ở giữa bố cục.

addViewInLayout là phiên bản "an toàn hơn" của addView trong trường hợp bạn thực sự phải thêm chế độ xem mới trong onLayout. Về cơ bản nó không kích hoạt một thẻ layout (không gọi requestLayout trong nội bộ).

Xem video này (bằng kỹ sư android) để xem chi tiết hơn: http://www.youtube.com/watch?v=HbAeTGoKG6k

5

addViewInLayout

Thêm một cái nhìn trong layout. Điều này rất hữu ích nếu trong phương thức onLayout() của bạn, bạn cần thêm nhiều khung nhìn hơn (ví dụ như chế độ xem danh sách). Nếu chỉ số là tiêu cực, nó có nghĩa là đặt nó ở cuối danh sách.

addView

Gán LayoutParams truyền cho Xem trôi qua và thêm quan điểm về phía cửa sổ.

* Lưu ý rằng addView được triển khai bởi ViewManager, Giao diện cho phép bạn thêm và xóa chế độ xem con vào Hoạt động, vì vậy bạn sẽ có thể thêm lượt xem vào ViewGroup vào thời gian chạy (NĂNG ĐỘNG). Cũng lưu ý rằng addViewInLayout là một phương pháp được bảo vệ của ViewGroup vì vậy nếu bạn đang làm để tạo một nhóm xem tùy chỉnh, bạn có thể gọi addViewInLayout() trong phương thức onLayout().

Để biết thêm thấy this

+0

cảm ơn câu trả lời của bạn. nhưng chúng chỉ được sao chép từ hướng dẫn của nhà phát triển Android. và không phải những gì tôi thực sự muốn biết. điều tôi đang hỏi là sự khác biệt "thực sự", hoặc bạn có thể nói sự khác biệt trong "mã". vẫn cảm ơn. – Henry

+0

Đó là những gì tôi giải thích addView có thể được gọi trong bất kỳ đối tượng viewgroup VÀ addViewInLayout phải được gọi là hình thức onLayout() phương pháp khi bạn tạo một nhóm xem tùy chỉnh. –

1

ví dụ: chúng tôi có một Layout (mLayout) và bạn muốn thêm 2 views (view1, View2) vào này layout.so có 2 cách (giống nhau)

hợp 1: chỉ cần bạn sử dụng lệnh

mLayout.addView(view1); //onLayout() will be called first time 
mLayout.addView(view2); //onLayout() will be called second time after the first time. 

trong trường hợp này như sau, bạn không quan tâm chức năng onLayout(). nó là mã nguồn đơn giản.

Trường hợp2: phức tạp nhưng hiệu suất tốt hơn

//do something to <global variable> 
    bCheck = true; //check it in fuction onLayout() 
    requestLayout(); //use this function to call onLayout() function for only one time 
    //in onLayout() function of mLayout, you use addViewInLayout() 
    //addViewInLayout() dont call onLayout() function, so you can add 2 views with only one time to call onLayout() 
    //onLayout() is abstract function, so mLayout is a instant of subclass of ViewGroup (ex: RelativeLayout, LinearLayout....) 
    @Override 
    onLayout(boolean changed, int l, int t, int r, int b) 
      if(bCheck == true){ 
      v.addViewInLayout(view1); //add view1 to mLayout 
      v.addViewInLayout(view1); //add view2 to mLayout 
       bCheck = false; 
      } 

     } 
    }); 

Tôi không có thời gian để kiểm tra nó. bất cứ ai cũng có thể giúp tôi làm rõ hơn.