如何重新创建自定义ViewGroup的子视图

时间:2018-08-08 14:14:55

标签: android android-layout android-view android-custom-view

最近,我启动了一个android项目,其中用Java类填充视图。我有一个容器ViewGroup对象,其中包含页眉,正文和页脚对象。基本上,我的看法如下所示。

Layout - This is how my view looks like

View Hierarchy

现在继续,我让每个组件处理它们自己的事件,然后如果需要更新任何其他组件,则通过根视图进行传播。在此示例中,我在标题上有一个计数器,如果单击任何正文列,该计数器都会增加。默认情况下,创建时列的颜色会根据其位置设置为蓝色或红色。如果单击列,它会更改颜色,从而更容易解决主要问题。

所需的情况是,当我单击左列(蓝色)时,列颜色将变为黄色(示例),然后标题计数器将增加为1。然后应重新创建单击的列再次经历构造函数以变成蓝色。

会发生什么,当单击蓝色列时,它的颜色变为黄色,并且标题计数器增加,但是该列仍然保持黄色。

我要做的是在单击列后重置或重新创建。到目前为止,我尝试了几件事,并搜索了类似的问题,但是找不到合适的答案。

面板类

public Class Panel extends ViewGroup{

    public Panel(Context context, Direction direction){

        // direction enum has default colors, BLUE and RED
        this.setBackgroundColor(this.direction.getColor());

        // basically like this
        setOnClick({
          changeColor();
          Body body = (Body) Panel.super.getParent();
          Container container = (Container) body.getParent();

          container.increment();
        })


    }
    ...
}

` 身体类别

public Class Body extends ViewGroup {

    private Panel col1;
    private Panel col2;

    public Body(Context context){
        ...
        col1 = new Panel(context, LEFT);
        col2 = new Panel(context, RIGHT);

        addView(..);
    }
    ...
 }

` 容器类

public Class Container extends ViewGroup {

    private Header header;
    private Body body;
    private Footer footer;

    public Body(Context context){
         ...
         body = new Body(context);
         ...
         addView(...);
    }

    public void increment(){  
         header.increment();
         this.body = new Body(this.getContext());
    }
    ...
}

` 这就是我尝试重新创建正文和嵌套列(面板)的方式

Container.body = new Body(this.getContext());

简而言之; 我希望使用默认参数(通过构造函数)重新创建子组件,而其他组件应保持不变。希望这个问题也能帮助其他人。谢谢。

PS。如果有任何混淆,我可以添加更多的伪代码和图表来阐明。

0 个答案:

没有答案