复合组件的自定义侦听器

时间:2016-12-31 03:33:55

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

我写了一个复合组件,并添加了一个自定义侦听器来作出反应。

在使用xml文件的复合组件的类中。

dead

我得到了我的界面,我得到了监听器,我得到了设置器,我在复合组件的按钮中使用了这样的监听器。当我测试

时,我可以看到那里出现的吐司
public class VerticalCounterBlock extends LinearLayout {

    public interface VerticalCounterBlockListener {
        public void onCountChanged(int newCount);
    }

    private VerticalCounterBlockListener mVerticalCounterBlockListener = null;

    public void setVerticalCounterBlockListener(VerticalCounterBlockListener listener){
        mVerticalCounterBlockListener = listener;
    }

    // ... Other functions
}

在我的主要活动中

addBtn = (Button)findViewById(R.id.btn_addcount);
addBtn.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {
        count++;
        counttv.setText(String.format("%1$d", count));
        Toast.makeText(getContext(), "VCB", Toast.LENGTH_SHORT).show();
        if(mVerticalCounterBlockListener != null) {
            mVerticalCounterBlockListener.onCountChanged(count);
        }
    }
});

我没有看到吐司,也没有参与函数调用。我错过了什么?

2 个答案:

答案 0 :(得分:0)

我可以在这里建议你几个改进范围,主要是重组目前的格式。

不要将接口保留为内部类。所以这是你的VerticalCounterBlockListener.java

public interface VerticalCounterBlockListener {
    public void onCountChanged(int newCount);
}

现在在interface

中实施此MainActivity
public class MainActivity implements VerticalCounterBlockListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        m20_vcb = (VerticalCounterBlock) findViewById(R.id.vcb_m20);
        m20_vcb.setVerticalCounterBlockListener(this);
    }

    // ... Other methods

    // Override the onCountChanged function. 
    @Override
    public void onCountChanged(int newCount) {
        increasePreachCountTotal();
        Toast.makeText(CounterActivity.this, String.format("%1$d", newCount), Toast.LENGTH_SHORT).show();
    }
}

您可以考虑从可能会产生异常的Toast点击侦听器中删除addBtn

addBtn = (Button)findViewById(R.id.btn_addcount);
addBtn.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {
        count++;
        counttv.setText(String.format("%1$d", count));

        if(mVerticalCounterBlockListener != null) {
            mVerticalCounterBlockListener.onCountChanged(count);
        }
    }
});

答案 1 :(得分:0)

我的系统出了问题,这很好。我卸载了应用程序并重新启动了计算机,它按预期工作。