onClick未在扩展布局中调用

时间:2014-10-31 08:11:27

标签: android

为什么在我的扩展LinearLayout中没有调用onClickListener?当我在我的活动布局中包含Setting_1时,onClick不会触发。

以下是复合控件的布局:

Setting.xml的

<?xml version="1.0" encoding="utf-8" ?>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    >

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp" />

    <TextView
        android:id="@+id/status"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp" />

</LinearLayout>

以下是使用上述布局的抽象类:

IntegerSettingLayout.java

public abstract class IntegerSettingLayout extends LinearLayout implements
        OnClickListener {

    public IntegerSettingLayout(Context context, AttributeSet attrs) {
        super(context, attrs);

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inflater.inflate(R.layout.setting, this, true);
    }

    ...

    @Override
    //this is not getting called
    public void onClick(View view) {
        if(BuildConfig.DEBUG) {Log.d(LOG_TAG,"onClick");}
    }

    abstract String getStatus();
    ...
}

这是实现上述抽象类

的类

Setting_1.java

public class setting_1 extends IntegerSettingLayout{

    public Setting_WeekFrequency(Context context, AttributeSet attrs) {
        super(context, attrs);
        ...

    }

    @Override
    String getStatus() {
        if(BuildConfig.DEBUG) {Log.d(LOG_TAG,"getStatus");}
    }

} 

2 个答案:

答案 0 :(得分:3)

您尚未注册OnClickListener。您需要为此调用setOnClickListener(),或使用XML中的android:onClick属性。

答案 1 :(得分:1)

this.setClickable(true);添加到构造函数中。