Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:OnClick在customView中重写OnClick时不工作_Java_Android_Android Custom View - Fatal编程技术网

Java Android:OnClick在customView中重写OnClick时不工作

Java Android:OnClick在customView中重写OnClick时不工作,java,android,android-custom-view,Java,Android,Android Custom View,我已经创建了一个自定义视图。我的自定义视图从RelativeLayout扩展: public class CircleProgressButton extends RelativeLayout {... 在自定义视图中,我有一个按钮: private void initView(Context context, AttributeSet attrs) { TypedArray typedArray = context.getTheme().obtainStyledAttributes(

我已经创建了一个自定义视图。我的自定义视图从
RelativeLayout
扩展:

public class CircleProgressButton extends RelativeLayout {...
在自定义视图中,我有一个按钮:

private void initView(Context context, AttributeSet attrs) {
    TypedArray typedArray = context.getTheme().obtainStyledAttributes(
            attrs, R.styleable.ProgressButton, 0, 0
    );
    try {
        progressHeight = typedArray.getInt(R.styleable.ProgressButton_progress_height, progressHeight);
        progressWidth = typedArray.getInt(R.styleable.ProgressButton_progress_width, progressWidth);
        progressIconSuccess = typedArray.getResourceId(R.styleable.ProgressButton_progress_iconSuccess, R.drawable.ic_done);
        progressIconFail = typedArray.getResourceId(R.styleable.ProgressButton_progress_iconfail, R.drawable.ic_fail);
        progressText = typedArray.getString(R.styleable.ProgressButton_progress_text);
        progressBackgroundImage = typedArray.getDrawable(R.styleable.ProgressButton_progress_button_background);
    } finally {
        typedArray.recycle();
    }

    initButton();
    initProgressBar();
    initImageView();
}
    private void initButton() {
        button = new AppCompatButton(getContext());
        LayoutParams button_params = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        button_params.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
        button.setLayoutParams(button_params);
        button.setText(TextUtils.isEmpty(progressText) ? "Button" : progressText);
        button.setGravity(Gravity.CENTER);
        StateListDrawable background = new StateListDrawable();
        background.addState(StateSet.WILD_CARD, progressBackgroundImage);
//        background.addState(new int[]{android.R.attr.state_pressed}, progressBackgroundImagePressed);
        button.setBackground(background);
        button.setClickable(false);
/*        button.setOnClickListener(v -> {
            if (imageView.getVisibility() == VISIBLE) imageView.setVisibility(GONE);
            progressBar.setVisibility(VISIBLE);
        });*/
        addView(button);
    }
现在,我将自定义视图附加到片段布局:

<com.tazik.circleprogressbutton.CircleProgressButton
    android:id="@+id/btn_save"
    android:layout_width="150dp"
    android:layout_height="70dp"
    app:progress_height="30"
    app:progress_width="30"
    app:progress_text = "@string/save_btn"
    app:progress_iconfail="@drawable/ic_fail"
    app:progress_iconSuccess="@drawable/ic_done"
    app:progress_button_background="@drawable/mybutton"
    android:clickable="true"/>
运行应用程序并单击
btnSave
后,日志将显示在logcat上

现在我想覆盖自定义视图中的OnClick,以便在自定义视图中实现
视图。OnClickListener

public class CircleProgressButton extends RelativeLayout implements View.OnClickListener {
private OnClickListener listener;

@Override
public void setOnClickListener(@Nullable View.OnClickListener l) {
    listener = l;
}
我点击一下:

@Override
public void onClick(View v) {
    if(listener != null){
        if (imageView.getVisibility() == VISIBLE) imageView.setVisibility(GONE);
        progressBar.setVisibility(VISIBLE);
   }

}
现在,在运行应用程序后,当我点击
btnSave
log时,日志并没有出现,这很正常

 binding.btnSave.setOnClickListener(v->{
    Log.i("======", "onSaveClicked: ");
    // do my stuff
});

不工作?发生了什么事?

如果您使用数据绑定,请尝试此项

<com.tazik.circleprogressbutton.CircleProgressButton
 android:onClick="@{()->viewModel.click()}"
 .........../>

试试这个对我有用的方法,在课堂上按CircleProgressButton添加这个功能:

private void init(){
    setOnClickListener(this);
}
并对所有构造函数调用init()。 把这个拿走

@Override
public void setOnClickListener(@Nullable View.OnClickListener l) {
 listener = l;
}
按如下方式编辑此方法:

binding = DataBindingUtil.inflate(inflater, R.layout.fragment_marhaleh, container, false);
    binding.btnSave.setOnClickListener(v->{
        Log.i("======", "onSaveClicked: ");
        // do my stuff
    });
@Override
public void onClick(View v) {
    if (imageView.getVisibility() == VISIBLE) imageView.setVisibility(GONE);
    progressBar.setVisibility(VISIBLE);
}
点击触发按钮

binding.btnSave.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            binding.btnSave.onClick(v);
            Log.i("======", "onSaveClicked: ");
            //code
        }
    });

在这之后应该是工作的

可能与这行按钮有关。可设置点击(错误);'我移除
按钮。可设置可点击(false)并且只有返回
按钮时才更改任何内容。可设置可点击(false)
并在单击片段时删除
@Override public void setOnClickListener(@Nullable View.OnClickListener l){listener=l;}
worked@Emirbut
onClick
方法,该方法重写自定义类中未调用的@EmirI来执行此操作,但我想知道的是,当circleprogressbutton在自定义视图中单击一些东西时,例如
progressBar.setVisibility(可见)所以我需要覆盖自定义视图中的onClick,我使用了
android:onClick=“@{(视图)->handlers.onSaveClicked(视图)}”
。它只调用我的方法而不调用自定义类@Ааааааааааааааааааааааааа@这是我片段的一部分及其布局:我得到了这个错误
/数据绑定错误****消息:找不到适用于android的正确回调类:onClick。尝试了android.view.view,但它有0个抽象方法,应该有1个抽象方法。
我有,但在自定义类上没有调用重写。只是`binding.btnSave.setOnClickListener(v->{Log.i(“,”onCreateView:”;})`在主课上叫@我更新了这个答案检查代码的最后一部分==>它正在工作,但通过这种方式,它不需要在自定义视图上实现View.onclick监听器,只需要创建一个方法,如
onclick()
,并从片段调用方法,如
binding.btnSave.onclick()@Аааааааааааааа