レイアウトからのビューの追加と削除


94

レイアウトからビューを追加および削除するにはどうすればよいですか?


どんなレイアウト?作業しているコードの一部を貼り付けてもらえますか?
クリスティアン

3
これはどのように準備されていますか?
Cornelius、

回答:


219

私はそれをそうやってやった:

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

44
新しいSDKでは(ViewGroup):)
Ron

この場合、ビューIDをリセットする方法を教えてください。次のビューが追加されるたびにアクティビティが終了した後でも、ビューIDがインクリメントされるのが問題です。再びこのアクティビティに戻ったときに、ビューIDをデフォルトの1に設定します。
AndroidNewBee 2015年

この答えを与えてくれた多くに感謝します
ヘム2016

ViewGroupはViewを拡張してViewParent、ViewManagerを実装します。(ViewGroup)へのキャストで呼び出す方がいい
Mercury

23

ViewStubを使用して、切り替えるビューのレイアウトを指定します。表示するには:

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

消えるために:

mViewStub.setVisibility(View.GONE);

40
非表示は削除と同じではありません。
ダークウォーター、2015年

非表示/再表示したい場合は、.setVisibility(View.INVISIBLE)と.setVisibility(View.VISIBLE)を使用できます。ビューが非表示の場合、ユーザーはビューを操作できません。
dennisschagt 2015

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のドキュメントを確認してください。レイアウトからビューを削除する簡単な方法の1つは、

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

4
removeAllViews()は私が探していたものです!
アラン

6

可視性を変更する場合:

predictbtn.setVisibility(View.INVISIBLE);

削除する場合:

predictbtn.setVisibility(View.GONE);

他のすべての答えよりも、私の問題を解決しました。私のように、背景やいくつかのパラメータがビューが完全に消えないようにする場合に役立ちます。
Virthuss、2015年

1
これは、View.GONEがレイアウトのビューを削除せず、非表示にするだけであり、レイアウトの目的でスペースを取らないためです。
ビクター

6

SameerとAbel Terefeからの素晴らしいanwser。ただし、ビューを削除する場合、私のオプションでは、特定のIDのビューを削除する必要があります。これをどのように行うのですか?

1、作成時にビューにIDを指定します。

_textView.setId(index);

2、次のIDのビューを削除します。

removeView(findViewById(index));

1

addViewまたは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);

コトリン:

// 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
GONEは効果的にビューを非表示にしますが、レイアウトからは削除しません
Sababado

1
単純に、parentView.remove(removeViewName);を使用します。
Zala Janaksinh、2012年

あなたはその通りですが、「GONE」ソリューションを提供することで、あなたが質問に答えていないことを示唆しようとしました。
Sababado

0

startおよびcountメソッドを使用してビューを削除しています。線形レイアウトで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.