1

我正面临这个问题,解决方案可能只是一个简单的问题,但我的尝试没有成功。
我有一个父视图容器,其中包含三个子视图,它们声明了 onClick 事件处理程序并执行不同的操作。
我想要做的是向其中的每一个添加状态列表可绘制对象,以便对于不同的状态,子视图的颜色会发生变化。
大致是这样的——
在此处输入图像描述

Child View 3 有它自己的 statelist 并且独立工作,我有我需要的东西。
但是,我想要的是子视图 1 和 2 的状态应该同时改变,当它们在单击时执行独立操作时任何一个的状态发生变化。所以基本上,如果我按下(按下状态)子视图 1,它可能会改变它的颜色,同样的情况也应该发生在 2 上,反之亦然。在此期间,子视图 3 应该不受影响。
我尝试了多种方法来解决 statelist drawables 但没有成功。谁能帮我解决这个问题?
我相信在 Android 中应该有一些优雅的方式来处理这个问题。
谢谢!

4

3 回答 3

0

如何实现一个接口,有点:

OnStateChangeListener() {
    onStateChanged(int color, int whatever);
}

对于两个相关的视图,并相互倾听状态的变化。

于 2015-07-02T02:14:04.643 回答
0

如果您将所有这些都直接在您的可绘制对象中完成,那是不可能的。

我敢肯定还有其他方法,但乍一看只有三种方法:

  1. 您可以使用RadioGroup然后使用 RadioButton实例

    • 这将需要更改默认的 RadioButton 样式
  2. 您可以创建一个自定义视图容器(例如派生自LinearLayout),然后在其中添加逻辑以处理来自其子视图的点击

    • 使用RadioGroup源作为参考 Google 是如何做到的
  3. 您可以使用GreenRobot EventBus或任何其他总线从您单击的视图中调度事件,并且任何其他视图都可以侦听并更改自己的状态

于 2015-07-02T02:21:11.740 回答
0

您可以创建这样的功能-

public void setStates(View views[],int clickedViewID){

for(int i=0;i<views.length;i++){
if(views[i].getID==clickedViewID){
//change color
}
else{
// do whatever like chnage color.
views[i].
}
}
}

传递所有三个子视图和单击视图的 id。

在这里,您可以检查三个视图的 id 是否匹配,而不是仅更改其颜色,否则对于所有其他视图。

于 2015-07-02T02:48:01.420 回答