Додавання та видалення подання з макета


94

Як я можу додати та видалити подання з макета?


що за макет? не могли б ви вставити частину коду, над яким працюєте?
Крістіан

3
Як це добре підготовлено?
Корнелій

Відповіді:


219

Я зробив це так:

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

44
У новіших SDK свої (ViewGroup):)
Рон

@schwiz, як ми можемо скинути ідентифікатори подання в цьому випадку. Моя проблема полягає навіть після того, як моя діяльність закінчується, коли додається наступне представлення, ідентифікатор перегляду збільшується. Я хочу, щоб ідентифікатор перегляду за замовчуванням становив 1, коли я знову повернуся до цієї активності .
AndroidNewBee

Велике спасибі за дану відповідь
hem

ViewGroup розширює View, реалізує ViewParent, ViewManager. приємніше назвати це кастингом до (ViewGroup)
Меркурій

23

Використовуйте ViewStub і вкажіть макет подання, яке потрібно перемкнути. Бачити:

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

Зникнути:

mViewStub.setVisibility(View.GONE);

40
Сховати - це не те саме, що видалити.
Darkwater

Якщо ви хочете приховати / показати, ви можете використовувати .setVisibility (View.INVISIBLE) та .setVisibility (View.VISIBLE). Коли вигляд невидимий, користувач не може з ним взаємодіяти.
dennisschagt

Скажімо, у мене є textView із прикріпленим до нього onClickListener. Якщо я змушу його зникнути, а потім натисну на нього, чи все-таки подія буде активована?
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 () - це те, що я шукав!
Алан

6

Для зміни видимості:

predictbtn.setVisibility(View.INVISIBLE);

Для видалення:

predictbtn.setVisibility(View.GONE);

Це вирішило мою проблему більше, ніж будь-яка інша відповідь. Корисно, якщо, як і я, ваш фон або деякі параметри заважають зору повністю зникнути.
Віртус

1
це тому, що View.GONE не видаляє подання для макета, лише робить його невидимим і не займає місця для макета.
Віктор

6

Великий заклинач від Самера та Абеля Терефе. Однак, коли ви видаляєте подання, за моїм варіантом, ви хочете видалити представлення з певним ідентифікатором. Ось як ви це робите.

1, дайте ідентифікатору подання під час його створення:

_textView.setId(index);

2, видаліть подання з ідентифікатором:

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

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

привіт, якщо ти новачок в android, використовуй цей спосіб Застосуй своє подання, щоб його зникли - це один із шляхів, інакше, влаштуйся на батьківський подання та видаліть дитину звідти ..... ще отримай батьківський макет і використовуй це метод an видалити всі дочірні батькиView.remove (дочірній)

Я б запропонував використовувати підхід GONE ...


1
GONE ефективно приховає вигляд, але не видалить його з макета
Sababado

1
Просте використання parentView.remove (removeViewName);
Zala Janaksinh

Ви маєте рацію щодо цього, але я намагався натякнути, що ви не відповіли на запитання, надавши рішення "ВІДХОДИЛО".
Сабабадо,

0

Я видаляю подання за допомогою методу start and 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)
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.