【问题标题】:Android View with CustomEvent, passing View as Argument带有 CustomEvent 的 Android View,将 View 作为参数传递
【发布时间】:2013-12-30 21:46:16
【问题描述】:

我有一个 DataAdapter 类,它的 getView() 返回一个自定义视图类。 View 本身是一个包含一些控件的 LinearLayout,其中一个是 CheckBox。它还有一些属性——来自数据库的 ID 和它在 DataAdapter 中的索引。

当 CheckBox OnCheckedChange 事件触发时,我希望在 DataAdapter 中触发一个事件,以便我知道更改基础数据。我可以使用界面在视图中设置自定义事件:

private OnChangedListener mListener;

public interface OnChangedListener{
    public void onChanged();
}

public void setOnChangedListener(OnChangedListener eventListener) {
    mListener=eventListener;
}

并从 CheckBox 的 CheckedChange 调用它:

private OnCheckedChangeListener checkChanged = new OnCheckedChangeListener(){
    @Override
    public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
        mListener.onChanged();
    }
}; 

但我不能做的是想办法将视图作为参数传回。如果我更改界面以返回视图:

public interface OnChangedListener{
    public void onChanged(MyCustomView arg0);
}

我无法从 OnCheckedChangeListener() 内部返回视图:

private OnCheckedChangeListener checkChanged = new OnCheckedChangeListener(){
    @Override
    public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
        mListener.onChanged(this);
    }
}; 

我收到一个错误: “MyCustomView.OnChangedListener 类型中的 onChanged(MyCustomView) 方法不适用于参数(新 CompoundButton.OnCheckedChangeListener(){})”

我考虑过使用 Handler.Post,但我会在 Runnable 中,所以我仍然无法公开视图。

我确定一定有一些简单的东西我错过了......

【问题讨论】:

    标签: android view arguments dataadapter custom-event


    【解决方案1】:

    mListener.onChanged(this); 中的this 不是指您的视图,而是指OnCheckedChangeListener(包装类)。您需要像这样返回视图:

    mListener.onChanged(/*reference to your view*/)
    

    【讨论】:

    • 这就是我的意思。我的问题是如何从 OnCheckedChangeListener 内部引用视图?
    • getView() 结束时返回的视图
    【解决方案2】:

    答案很简单。 CheckButtons 父级应该是我正在寻找的视图的实例:

        public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
            ViewParent parent = arg0.getParent();
    
            if (parent instanceof CustomView){
                Custom myView = (CustomView) parent;
                mListener.onChanged(myView);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2022-10-18
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-17
      • 2013-09-21
      相关资源
      最近更新 更多