레이아웃에서보기 추가 및 삭제


94

레이아웃에서보기를 추가 및 삭제하려면 어떻게합니까?


어떤 종류의 레이아웃? 작업중인 코드의 일부를 붙여 주시겠습니까?
Cristian

3
어떻게 잘 준비되어 있습니까?
Cornelius

답변:


219

나는 그렇게했다 :

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

45
최신 SDK에서는 (ViewGroup):)
Ron

@schwiz이 경우 어떻게 뷰 ID를 재설정 할 수 있습니까? 내 문제는 다음 뷰가 추가 될 때마다 내 활동이 완료된 후에도 뷰 ID가 증가합니다.이 활동으로 다시 돌아갈 때 뷰 ID가 기본값 1로 설정되기를 원합니다. .
AndroidNewBee

이 답변을 주셔서 감사합니다
hem

ViewGroup은 View를 확장하여 ViewParent, ViewManager를 구현합니다. 친절은 (뷰 그룹)에 캐스팅 그것을 호출
수성

24

ViewStub을 사용하고 전환하려는보기의 레이아웃을 지정합니다. 보기 :

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

사라합니다:

mViewStub.setVisibility(View.GONE);

40
숨기는 것은 제거하는 것과 다릅니다.
Darkwater

숨기거나 숨기지 않으려면 .setVisibility (View.INVISIBLE) 및 .setVisibility (View.VISIBLE)을 사용할 수 있습니다. 뷰가 보이지 않으면 사용자는 뷰와 상호 작용할 수 없습니다.
dennisschagt 2015-08-28

onClickListener가 연결된 textView가 있다고 가정 해 보겠습니다. 사라지게 한 다음 탭하면 이벤트가 계속 실행됩니까?
ahitt6345

22

이것이 가장 좋은 방법입니다

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

xml 레이아웃이 있으면 동적으로 추가 할 필요가 없습니다.

lp.removeViewAt(0);

성능 측면에서 차이점은 무엇입니까? 동적으로 추가하거나 정적 xml 레이아웃 파일에 넣고 팽창시키는 성능 차이를 의미합니까?
stdout

19

레이아웃에 뷰를 추가하려면 클래스의 addView메서드를 사용할 수 있습니다 ViewGroup. 예를 들면

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

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

또한 많은 제거 방법이 있습니다. ViewGroup 문서를 확인하십시오 . 레이아웃에서보기를 제거하는 간단한 방법은 다음과 같습니다.

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

4
removeAllViews ()는 내가 찾던 것입니다!
Alan

6

가시성을 변경하려면 :

predictbtn.setVisibility(View.INVISIBLE);

제거 :

predictbtn.setVisibility(View.GONE);

그것은 다른 모든 대답보다 내 문제를 해결했습니다. 나처럼 배경이나 일부 매개 변수가 뷰가 완전히 사라지는 것을 방해하는 경우 유용합니다.
Virthuss

1
View.GONE은 레이아웃에 대한 뷰를 제거하지 않고 보이지 않게 만들고 레이아웃 목적으로 공간을 차지하지 않기 때문입니다.
Victor

6

Sameer와 Abel Terefe의 위대한 anwser. 그러나보기를 제거 할 때 내 옵션에서 특정 ID를 가진보기를 제거하고 싶습니다. 방법은 다음과 같습니다.

1, 뷰를 만들 때 ID를 제공하십시오.

_textView.setId(index);

2, ID가있는보기를 제거하십시오.

removeView(findViewById(index));

1

addView 또는 removeView를 사용할 수 있습니다.

자바:

// 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);

코 틀린 :

// 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

안녕 당신이 안드로이드를 처음 사용한다면이 방법을 사용하십시오.보기를 적용하여 사라지게하십시오. 그렇지 않으면 부모보기를 잡고 거기에서 자식을 제거하십시오 ..... 그렇지 않으면 부모 레이아웃을 가져 와서 이것을 사용하십시오. 모든 자식을 제거하는 메서드 parentView.remove (child)

나는 GONE 접근 방식을 사용하는 것이 좋습니다 ...


1
효과적으로보기를 숨길 사라졌다하지만 레이아웃에서 제거되지 않습니다
Sababado

1
간단하게 parentView.remove (removeViewName);
Zala Janaksinh

당신 말이 맞지만, "GONE"솔루션을 제공함으로써 당신이 질문에 답하고 있지 않다는 것을 암시하려했습니다.
Sababado 2012

0

시작 및 계산 방법을 사용하여보기를 제거하고 있으며 선형 레이아웃에 3 개의보기를 추가했습니다.

view.removeViews (0, 3);


0

Kotlin 재사용 가능한 확장 솔루션

제거 단순화

이 확장 추가 :

myView.removeSelf()

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

덧셈 단순화

다음은 몇 가지 옵션입니다.

// 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)
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.