Android-在onClick操作期间隐藏按钮

Android-在onClick操作期间隐藏按钮,android,android-layout,onclick,visibility,Android,Android Layout,Onclick,Visibility,我需要在onClick操作期间隐藏一个按钮,如下所示: public void onClick(View view) { switch (view.getId()){ case R.id.button1: Button button2 = (Button) findViewById(R.id.button2); button2.setVisibility(View.GONE); //Som

我需要在onClick操作期间隐藏一个按钮,如下所示:

    public void onClick(View view) {
    switch (view.getId()){
        case R.id.button1:

            Button button2 = (Button) findViewById(R.id.button2);
            button2.setVisibility(View.GONE);

            //Some methods
            //...

            button2.setVisibility(View.VISIBLE);

            break;
    }
但是可见性仅在onClick之后发生变化,在onClick期间如何隐藏按钮


谢谢

您可以尝试以下方法:

@Override
public boolean onTouch(View v, MotionEvent event) {
    switch(v.getId()){
    case R.id.button1: {
        if(event.getAction() == MotionEvent.ACTION_DOWN){

            Button button2 = (Button) findViewById(R.id.button2);
            button2.setVisibility(View.GONE);

            return true;
        } else if(event.getAction() == MotionEvent.ACTION_UP) {

            // some methods

            Button button2 = (Button) findViewById(R.id.button2);
            button2.setVisibility(View.VISIBLE);

            return true;
        }
    return false;
    }
}

您可以尝试以下方法:

@Override
public boolean onTouch(View v, MotionEvent event) {
    switch(v.getId()){
    case R.id.button1: {
        if(event.getAction() == MotionEvent.ACTION_DOWN){

            Button button2 = (Button) findViewById(R.id.button2);
            button2.setVisibility(View.GONE);

            return true;
        } else if(event.getAction() == MotionEvent.ACTION_UP) {

            // some methods

            Button button2 = (Button) findViewById(R.id.button2);
            button2.setVisibility(View.VISIBLE);

            return true;
        }
    return false;
    }
}

当然,由于您在同一线程中执行所有操作,您可能会注意到可见性的变化,请尝试以下操作:

public void onClick(View view) {
switch (view.getId()){
    case R.id.button1:

        final button2 = (Button) findViewById(R.id.button2);
        button2.setVisibility(View.GONE);

        setVisibility(GONE);
        new Thread(new Runnable() {
            @Override
            public void run() {
                //your work

                runOnUiThread(new Runnable() { //resetting the visibility of the button
                    @Override
                    public void run() {
                        //manipulating UI components from outside of the UI Thread require a call to runOnUiThread
                        button2.setVisibility(VISIBLE);
                    }
                });
            }
        }).start();

        break;
}
}

当然,由于您在同一线程中执行所有操作,您可能会注意到可见性的变化,请尝试以下操作:

public void onClick(View view) {
switch (view.getId()){
    case R.id.button1:

        final button2 = (Button) findViewById(R.id.button2);
        button2.setVisibility(View.GONE);

        setVisibility(GONE);
        new Thread(new Runnable() {
            @Override
            public void run() {
                //your work

                runOnUiThread(new Runnable() { //resetting the visibility of the button
                    @Override
                    public void run() {
                        //manipulating UI components from outside of the UI Thread require a call to runOnUiThread
                        button2.setVisibility(VISIBLE);
                    }
                });
            }
        }).start();

        break;
}
}

如果您想在用户单击另一个视图时隐藏按钮/视图,则必须实现
onTouchListener
而不是
onClickListener
我想在“某些方法”时隐藏按钮如果你想在用户点击另一个视图时隐藏一个按钮/视图,那么你必须实现
onTouchListener
,而不是
onClickListener
。我想在执行“某些方法”时隐藏按钮。这很有效!另一个问题,总共有3个线程,一个用于将可见性设置为GONE,另一个用于执行我的工作,最后一个用于再次设置可见性。可以在两个线程中执行相同的操作吗?实际上,只有两个线程,UI线程和第二个线程用于您的工作,
runUnuithRead
不会创建新线程,而只是将其
run
方法中的代码发布到UI线程中。从文档about
runOnUiThread
方法:在UI线程上运行指定的操作。如果当前线程是UI线程,则立即执行该操作。如果当前线程不是UI线程,则操作将被发布到UI线程的事件队列中。这很有效!另一个问题,总共有3个线程,一个用于将可见性设置为GONE,另一个用于执行我的工作,最后一个用于再次设置可见性。可以在两个线程中执行相同的操作吗?实际上,只有两个线程,UI线程和第二个线程用于您的工作,
runUnuithRead
不会创建新线程,而只是将其
run
方法中的代码发布到UI线程中。从文档about
runOnUiThread
方法:在UI线程上运行指定的操作。如果当前线程是UI线程,则立即执行该操作。如果当前线程不是UI线程,则将操作发布到UI线程的事件队列。