android studio: измените характеристики кнопок в runOnUi, заблокируйте эти кнопки - PullRequest
0 голосов
/ 21 ноября 2018

У меня две кнопки: продать и купить.

1. Когда я нажимаю на продажу, я звоню setOnClickistener на кнопку продажи.Внутри я создаю поток (мне это нужно по определенной причине), а внутри потока я использую этот код:

runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Button buyButton = findViewById(R.id.buy_button);
                buyButton.setEnabled(true);
                Button sellButton = findViewById(R.id.sell_button);
                sellButton.setBackgroundDrawable(buyButton.getBackground());
                sellButton.setText(getResources().getString(R.string.stop_selling));
                sellButton.setTextColor(getResources().getColor(android.R.color.white));
            }
        });

2. Я снова нажимаю кнопку продажи, чтобы вернуться в нормальное состояние.Поэтому я снова установил OnClickistener на кнопку продажи.Внутри я снова создаю нить, а внутри нити я использую этот код:

runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Button buyButton = findViewById(R.id.buy_button);
                buyButton.setEnabled(true);
                Button sellButton = findViewById(R.id.sell_button);
                sellButton.setBackgroundDrawable(buyButton.getBackground());
                sellButton.setText(getResources().getString (R.string.sell));
                sellButton.setTextColor(resTextColorToChange);
            }
        });

Затем я нажимаю кнопку покупки.Я звоню setOnClickistener на кнопку покупки.Внутри я создаю поток (мне это нужно по определенной причине), а внутри потока я использую этот код:

 runOnUiThread(new Runnable() {
        @Override
        public void run() {
            Button sellButton =  findViewById(R.id.sell_button);
            Button buyButton =  findViewById(R.id.buy_button);
            sellButton.setEnabled(false);
            buyButton.setEnabled(false);
        }
    });

Я ожидаю, что кнопка продавать и покупать станет неактивной ... Кнопкапокупка не включена ... но кнопка продажи остается активной!У вас есть идея, почему ??

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Чтобы быть более точным в этом вопросе, я протестировал другой код, похожий на него, вот он:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

int a = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    findViewById(R.id.sell_button).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(a==0) {
                findViewById(R.id.buy_button).setEnabled(false);
                Button sellButton = findViewById(R.id.sell_button);
                sellButton.setBackgroundColor(getResources().getColor(android.R.color.holo_red_dark));
                sellButton.setText("STOP SELLING");
                sellButton.setTextColor(getResources().getColor(android.R.color.white));
                a=1;
            }
            else{
                Button buyButton = findViewById(R.id.buy_button);
                buyButton.setEnabled(true);
                Button sellButton = findViewById(R.id.sell_button);
                sellButton.setBackgroundDrawable(buyButton.getBackground());
                sellButton.setText("SELL DATA");
                sellButton.setTextColor(buyButton.getTextColors().getDefaultColor());
                a=0;
            }
        }
    });

    findViewById(R.id.buy_button).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Button sellButton =  findViewById(R.id.sell_button);
            Button buyButton =  findViewById(R.id.buy_button);
            sellButton.setEnabled(false);
            buyButton.setEnabled(false);
        }
    });
}

}

Здесь нет runOnThreadUi (), но снова, еслиЯ нажимаю «Продать», затем снова нажимаю «Продать» и затем нажимаю «Купить»: кнопка «Купить» не включена, но кнопка «Продать» все еще включена, что звучит не логично!

0 голосов
/ 21 ноября 2018

Пожалуйста, обратитесь к документации runOnUiThread, и вы увидите, что если текущий поток не является потоком пользовательского интерфейса, то действие не выполняется немедленно.Скорее, он размещен в очереди событий.

Теперь, это правда, это ваш случай.Следовательно, это может быть случай, когда любой из ваших Runnable может быть выполнен и в произвольном порядке.

Что вы можете сделать, это записать в журнал выполнения Runnable, поскольку у вас их много, и убедиться, что ни один изнежелательные исполняются, а не в нежелательном порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...