Как динамически изменить пользовательский вид в Android - PullRequest
0 голосов
/ 15 сентября 2018

Прежде всего - я новичок в Android.Я создал несколько пользовательских классов представления, как показано ниже.

  • CustomViewBaseClass
  • CustomViewOne расширяет CustomViewBaseClass
  • CustomViewTwo расширяет CustomViewBaseClass
  • CustomViewThree расширяет CustomViewBaseClass

В моем файле макета я добавил CustomViewOne, как показано ниже

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <com.test.custom.CustomViewOne
        android:id="@+id/cvone"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:visibility="visible" />

</LinearLayout>

Это работает нормально, как и ожидалось.

Но я хочу динамически заменить это CustomViewOne на CustomViewTwo/ CustomViewThree для некоторых событий (нажатие кнопки и т. Д.)

Как сделать это во время выполнения?

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

приведение их к CustomViewBaseClass делает обработку менее сложной:

CustomViewBaseClass customView = (CustomViewBaseClass) findViewById(R.id.cvone);
mLinearLayout.removeView(customView);

customView = (CustomViewBaseClass) new CustomViewTwo(MainActivity.this);
mLinearLayout.addView(customView);

потому что в противном случае всегда нужно проверять их класс с помощью instanceof.

0 голосов
/ 15 сентября 2018
LinearLayout parent = findViewById(R.id.parent);
CustomViewOne customViewOne = findViewById(R.id.cvone);
parent.removeView(customViewOne);

//Now Add your CustomViewTwo
CustomViewTwo customViewTwo = new CustomViewTwo(YourActivity.this);
parent.addView(customViewTwo);
...