【问题标题】:How to pass to the status of other views to a custom view in Android?如何将其他视图的状态传递给Android中的自定义视图?
【发布时间】:2018-09-08 10:33:58
【问题描述】:

在我的主要活动页面中,我有一个自定义视图以及一些其他视图,例如广播组。我想根据主活动页面中这些其他视图的状态来更改我的自定义视图方法的行为。例如,如果主活动页面中的单选组设置为“选项 1”,我想在自定义视图的 onTouchEvent 内绘制一个形状,如果单选组设置为“选项 2”,我想绘制另一个形状。

当我在onTouchEvent 中调用findViewId 时,我得到空值。我想在自定义视图中定义我的收音机组,但我希望有一个更优雅的解决方案,我不必这样做。我想使用单例,但我希望有一个更简单的解决方案。

** 编辑: 我发现对我来说最直观的解决方案如下:

在活动类和onCreate 方法中,我创建了一个侦听器,在该侦听器中我将调用自定义视图的setter 方法来传递来自无线电组的选定选项。更具体地说,在活动类和 onCreate 方法中,我有以下几行:

RadioGroup actionRadioGroup = (RadioGroup) findViewById(R.id.action);
actionRadioGroup.setOnCheckedChangeListener(new 
             RadioGroup.OnCheckedChangeListener() 
{
    @Override
    public void onCheckedChanged(RadioGroup radioGroup, int i) {
       int currAction = radioGroup.getCheckedRadioButtonId();
       MyView myView = (MyView) findViewById(R.id.myview);
       myView.setAction(currAction);
    }
});

在我的自定义视图中,我有这个方法:

public void setAction(int currAction) {
     this.currAction = currAction;
     /// other stuff
}

【问题讨论】:

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


    【解决方案1】:

    我建议创建提供所需信息的接口,在 Activity 中实现它并注入到视图中,如下所示:

    RadioGroupInfoProvider.java

    public interface RadioGroupInfoProvider {
    
        String getRadioGroupInfo();
    }
    

    MainActivity.java

    public class MainActivity extends Activity implements RadioGroupInfoProvider { 
    
        //...
    
        void setUp() {
            YourCustomView yourCustomView = findViewById(R.id.customView);
            yourCustomView.setRadioGroupInfoProvider(this);
    
        }
    
        @Override
        String getRadioGroupInfo() {
            return radioGroup.toString()
        }
    }
    

    CustomView.java

    void setRadioGroupInfoProvider(RadioGroupInfoProvider radioGroupInfoProvider) {
        this.radioGroupInfoProvider = radioGroupInfoProvider;
    }
    

    然后在onTouchEvent里面:

    String info = radioGroupInfoProvider.getRadioGroupInfo();
    

    【讨论】:

    • 如果有更多项目需要与自定义视图(文本编辑)进行通信并且它们依赖于用户操作,会发生什么情况?例如,如果在主活动中按下更新按钮,一旦发生这种情况,我想阅读主活动中的一些文本编辑,并基于该更改自定义视图中的某些内容?我也可以使用该界面将信息从自定义视图传递到主要活动吗?
    • 你可以为自定义视图创建一些接口——你不需要一个接口,你可以在自定义视图中放置一些方法并使用与 setRadioGroupProvider(...) 相同的方式调用它们跨度>
    猜你喜欢
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多