#java #android #android-studio
#java #Android #android-studio
Вопрос:
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn_apple = (Button) findViewById(R.id.button_apple);
Button btn_cherry = (Button) findViewById(R.id.button_cherry);
Button btn_orange = (Button) findViewById(R.id.button_orange);
Button btn_waterLemon = (Button) findViewById(R.id.button_waterlemon);
btn_apple.setOnClickListener(new View.OnClickListener() {
boolean action = false;
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button_apple:
if (!action) {
action = true;
btn_apple.setText("1");
}
else {
int i = Integer.parseInt(btn_apple.getText().toString());
btn_apple.setText(String.valueOf(i 1));
}
break;
case R.id.button_cherry:
action = false;
if (!action) {
action = true;
btn_cherry.setText("1");
}
else {
int i = Integer.parseInt(btn_cherry.getText().toString());
btn_cherry.setText(String.valueOf(i 1));
}
break;
}
}
});
}
}
Мне нужно сделать так, чтобы, если пользователь нажимает на button_apple и не нажимает на него в течение 3 секунд, его текст становится настолько лишним. И если кто-нибудь знает, почему мой текст изменяется в button_apple, но не в button_cherry. Скажите мне, пожалуйста.
Ответ №1:
Вы устанавливаете прослушиватель на своей кнопке Apple. На вишневой кнопке нет прослушивателя.
Пересмотрите то, чего вы пытаетесь достичь, и упростите это.
Если пользователь нажимает на кнопку Apple, вам нужно что-то сделать.
Если пользователь нажимает вишневую кнопку, вам нужно что-то сделать (возможно, что-то еще).
Если пользователь нажимает кнопку watermellon, … и так далее.
// define your listeners
View.OnClickListener appleListener = new View.OnClickcListener() {
@Override
public void onClick(View v) {
// do whatever you need to do when the apple button is clicked
}
};
// same thing for cherry listener, make a listener to handle the click action
View.OnClickListener cherryListener = ...
// register the listeners
btnApple.setOnClickListener(appleListener);
btnCherry.setOnClickListener(cherryListener);
...
Редактировать
Чтобы что-то произошло через определенное время, вы должны учитывать:
- входные данные: какие объекты / переменные влияют на действие
- вывод: что должно произойти, если все входные данные действительны
- длительность
С Android вы могли бы использовать обработчик. См. Метод postDelayed.
long delayMillis = 3000L; // duration after which to run your task
Handler handler = new Handler(Looper.getMainLooper());
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Do something after the delay in milliseconds
}
}, delayMillis);
Все это должно быть внутри прослушивателя кликов с логикой, которую вам нужно реализовать.
«Если пользователь нажимает на кнопку apple и не нажимает на нее в течение трех секунд»
Вы могли бы сделать что-то вроде
View.OnClickListener appleListener = new View.OnClickcListener() {
AtomicInteger clicks = new AtomicInteger(0);
@Override
public void onClick(View v) {
int numClicks = clicks.incrementAndGet();
if (numClicks == 1) {
long delayMillis = 3000L; // duration after which to run your task
Handler handler = new Handler(Looper.getMainLooper());
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (clicks.get() == 1) {
// they only clicked once, do whatever you need to do to make the text superfluous
}
// put the number of clicks back to 0
clicks.set(0);
}
}, delayMillis);
}
} else {
// TODO
// it's been clicked more than once
// show a toast if you need to or do something else
}
}
Я не тестировал это, поэтому вам, вероятно, придется немного изменить его, но это общая идея.
Комментарии:
1. Спасибо, с вопросом о том, почему текст в вишневой кнопке не изменился, я разобрался благодаря вам, но как сделать так, чтобы текст в кнопке менялся через 3 секунды, если пользователь не нажимает на нее?
2. Добро пожаловать в stack overflow. Если ответ был полезен, пожалуйста, подумайте о голосовании. Я обновил ответ на изменение текста кнопки по истечении указанного времени. Он не тестировался, поэтому, возможно, он не идеален, но в нем изложен один из способов решения этой проблемы.