Thêm và xóa chế độ xem khỏi Bố cục


94

Làm cách nào để thêm và xóa chế độ xem khỏi bố cục?


những loại bố cục? bạn có thể vui lòng dán một phần của mã bạn đang làm việc trên không?
Cristian

3
Làm thế nào là điều này được chuẩn bị tốt?
Cornelius

Câu trả lời:


219

Tôi đã làm như vậy:

((ViewManager)entry.getParent()).removeView(entry);

44
Trong SDK mới của mình (ViewGroup):)
Ron

@schwiz làm thế nào chúng ta có thể đặt lại id chế độ xem trong trường hợp này. .
AndroidNewBee

Cảm ơn rất nhiều vì đã đưa ra câu trả lời này
hem

ViewGroup mở rộng View triển khai ViewParent, ViewManager. đẹp hơn khi gọi nó với việc truyền đến (ViewGroup)
Mercury

23

Sử dụng ViewStub và chỉ định bố cục của dạng xem bạn muốn chuyển đổi. Xem:

mViewStub.setVisibility(View.VISIBLE) or mViewStub.inflate();

Biến mất:

mViewStub.setVisibility(View.GONE);

40
Ẩn không giống như loại bỏ.
Darkwater

Nếu bạn muốn ẩn / hiện, bạn có thể sử dụng .setVisibility (View.INVISIBLE) và .setVisibility (View.VISIBLE). Khi chế độ xem ẩn, người dùng không thể tương tác với nó.
dennisschagt

Giả sử tôi có một textView với onClickListener được đính kèm vào nó. Nếu tôi làm cho nó biến mất và sau đó tôi nhấn vào nó, thì sự kiện vẫn diễn ra chứ?
ahitt6345

22

Đây la cach tôt nhât

LinearLayout lp = new LinearLayout(this);
lp.addView(new Button(this));
lp.addView(new ImageButton(this));
// Now remove them 
lp.removeViewAt(0); // and so on

Nếu bạn có bố cục xml thì không cần thêm động. Chỉ cần gọi

lp.removeViewAt(0);

Sự khác biệt về hiệu suất sẽ là gì? Ý tôi là sự khác biệt về hiệu suất của việc thêm chúng động hoặc đưa chúng vào tệp bố cục xml tĩnh và để nó được thổi phồng?
stdout

19

Để thêm dạng xem vào một bố cục, bạn có thể sử dụng addViewphương thức của ViewGrouplớp. Ví dụ,

TextView view = new TextView(getActivity());
view.setText("Hello World");

ViewGroup Layout = (LinearLayout) getActivity().findViewById(R.id.my_layout);
layout.addView(view); 

Ngoài ra còn có một số phương pháp loại bỏ. Kiểm tra tài liệu của ViewGroup . Một cách đơn giản để xóa chế độ xem khỏi bố cục có thể như,

layout.removeAllViews(); // then you will end up having a clean fresh layout

4
removeAllViews () là những gì tôi đang tìm kiếm!
Alan

6

Để thay đổi tầm nhìn:

predictbtn.setVisibility(View.INVISIBLE);

Để loại bỏ:

predictbtn.setVisibility(View.GONE);

Nó đã khắc phục sự cố của tôi, nhiều hơn mọi câu trả lời khác. Hữu ích nếu như tôi, nền hoặc một số thông số của bạn ngăn chế độ xem biến mất hoàn toàn.
Virthuss

1
đó là vì View.GONE không xóa chế độ xem cho bố cục, chỉ làm cho nó ẩn và nó không chiếm bất kỳ không gian nào cho mục đích bố cục.
Victor

6

Nhà cảm xạ cừ khôi của Sameer và Abel Terefe. Tuy nhiên, khi bạn xóa chế độ xem, trong tùy chọn của tôi, bạn muốn xóa chế độ xem có id nhất định. Đây là cách bạn làm điều đó.

1, cung cấp cho chế độ xem một id khi bạn tạo:

_textView.setId(index);

2, loại bỏ chế độ xem với id:

removeView(findViewById(index));

1

bạn có thể sử dụng addView hoặc removeView

java:

// Root Layout
LinearLayout linearLayout = new LinearLayout(context);
linearLayout.setGravity(Gravity.CENTER);
linearLayout.setOrientation(LinearLayout.VERTICAL);

// TextView
TextView textView = new TextView(context);
textView.setText("Sample");

// Add TextView in LinearLayout
linearLayout.addView(textView);

// Remove TextView from LinearLayout
linearLayout.removeView(textView);

kotlin:

// Root Layout
val linearLayout = LinearLayout(context)
linearLayout.gravity = Gravity.CENTER
linearLayout.orientation = LinearLayout.VERTICAL

// TextView
val textView = TextView(context)
textView.text = "Sample"

// Add TextView in LinearLayout
linearLayout.addView(textView)

// Remove TextView from LinearLayout
linearLayout.removeView(textView)

0

Xin chào nếu bạn là người mới sử dụng android, hãy sử dụng theo cách này Áp dụng chế độ xem của bạn để biến nó thành GONE, còn cách khác, hãy giữ chế độ xem chính và xóa con khỏi đó ..... người khác lấy bố cục mẹ và sử dụng cái này phương thức an remove all child parentView.remove (child)

Tôi sẽ đề xuất sử dụng phương pháp GONE ...


1
GONE hiệu quả sẽ giấu quan điểm nhưng nó sẽ không loại bỏ nó từ cách bố trí
Sababado

1
Sử dụng đơn giản parentView.remove (removeViewName);
Zala Janaksinh

Bạn nói đúng về điều đó, nhưng tôi đang cố gợi ý rằng bạn không trả lời câu hỏi bằng cách cung cấp giải pháp "GONE".
Sababado

0

Tôi đang xóa chế độ xem bằng Phương pháp bắt đầu và đếm, tôi đã thêm 3 chế độ xem trong Bố cục tuyến tính.

view.removeViews (0, 3);


0

Giải pháp mở rộng có thể tái sử dụng Kotlin

Đơn giản hóa việc xóa

Thêm phần mở rộng này:

myView.removeSelf()

fun View?.removeSelf() {
    this ?: return
    val parent = parent as? ViewGroup ?: return
    parent.removeView(this)
}

Đơn giản hóa việc bổ sung

Dưới đây là một số tùy chọn:

// Built-in
myViewGroup.addView(myView)

// Null-safe extension
fun ViewGroup?.addView(view: View?) {
    this ?: return
    view ?: return
    addView(view)
}

// Reverse addition
myView.addTo(myViewGroup)

fun View?.addTo(parent: ViewGroup?) {
    this ?: return
    parent ?: return
    parent.addView(this)
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.