如何在Android中以编程方式替换视图?

9 浏览
0 Comments

如何在Android中以编程方式替换视图?

我有一个复杂的视图,包含几个子视图,如文本视图和图像视图。

我想用另一个(派生的)图像视图替换其中一个图像视图(另一个支持在后台加载图像)。

我该如何用新的视图替换原始的图像视图?

目前我采用的解决方案是复制整个XML布局,然后在新的XML中进行替换 - 这样做非常不好,会产生重复和不重用的问题 🙁

0
0 Comments

问题的原因是需要在Android中以编程方式替换视图。解决方法是使用一个实用类来移除一个视图并用另一个视图替换它。以下是解决方法的代码示例:

import android.view.View;
import android.view.ViewGroup;
public class ViewGroupUtils {
    public static ViewGroup getParent(View view) {
        return (ViewGroup)view.getParent();
    }
    public static void removeView(View view) {
        ViewGroup parent = getParent(view);
        if(parent != null) {
            parent.removeView(view);
        }
    }
    public static void replaceView(View currentView, View newView) {
        ViewGroup parent = getParent(currentView);
        if(parent == null) {
            return;
        }
        final int index = parent.indexOfChild(currentView);
        removeView(currentView);
        removeView(newView);
        parent.addView(newView, index);
    }
}

关于后续问题,当你想要将一个现有布局添加到另一个布局中时,可以使用标签。在这里,我想以编程方式在另一个视图中替换一个视图,而不是在编译时。

另外一个小的补充是,在方法中,在将添加到父布局之前,可以复制的id:newView.setId(currentView.getId());,这样findViewById将返回

还有一个问题是,是针对的,对于,需要做一些不同的处理:newView.setLayoutParams(currentView.getLayoutParams());。还有一个会影响到的是

0