Создайте одну кнопку для выполнения действий в два клика

#android

#Android

Вопрос:

У меня есть группа кнопок для действия.Когда я нажимаю на кнопку, она устанавливает текст в textview и изменяет цвет фона кнопки. Затем, когда я снова нажму ту же кнопку, он перейдет к следующему действию.Приведенный ниже код выполняет эти действия. Я изменил текст кнопки и выполнил действие второго щелчка. Есть ли лучший способ сделать это без изменения текста.

В коде, который я показал для 1 кнопки. Точно так же я делаю это для других кнопок.

Активность

 public class Activity2 extends ActionBarActivity implements View.OnClickListener {

Button R1btn, R2btn, R3btn;
private TableLayout tableLayout;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_2);
        tableLayout=(TableLayout)findViewById(R.id.tl);

    R1btn = (Button) findViewById(R.id.button1);
    R1btn.setOnClickListener(this);

    }
    @Override
    public void onClick(View view) {
    switch(view.getId()){

    case R.id.button1:
      Button button1 = (Button)view;
      String btnText = button1.getText().toString();

      if (btnText.equals("1")) {

        R1btn.setBackgroundColor(Color.RED); 
        R2btn.setBackgroundColor(Color.GREEN)); 
        R3btn.setBackgroundColor(Color.GREEN)); 

        TextView rTV  = (TextView) findViewById(R.id.rTV);
            rTV.setText(R1);
        button1.setText("1 ");  

}   else if (btnText.equals("1 ")) {

            Intent intent = new Intent(Activity2.this, Activity3.class);
            startActivity(intent);
        button1.setText("1");

    break;
}
}
}
  

Комментарии:

1. используйте логическую переменную для каждой кнопки и измените свое действие в соответствии с ее значением.

Ответ №1:

Используя тег вашей кнопки, вы сможете достичь своей цели. Пример кода приведен ниже:

    Button button1 = (Button)view;
      String btnTag= button1.getTag().toString();
// For First Time when button is clicked
      if (btnTag.equals("") || btnTag.equals("CLICKED2")) {
        R1btn.setBackgroundColor(Color.RED); 
        R2btn.setBackgroundColor(Color.GREEN)); 
        R3btn.setBackgroundColor(Color.GREEN)); 
        button1.setTag("CLICKED1");  
      }   else if (btnTag.equals("CLICKED1")) {
        button1.setTag("CLICKED2");  
        Intent intent = new Intent(Activity2.this, Activity3.class);
        startActivity(intent);
      }
break;
  

Комментарии:

1. tag () кажется хорошим вариантом. Почему вы также добавили btnTag.equals(«CLICKED2») в условие if?

2. чтобы проверить, какой щелчок выполнить

3. да, понял это. проверено с ней и без нее.

4. но проверьте случай onResume, когда вы вернетесь к своей активности и снова выполните щелчок

5. хорошо, на данный момент проблем нет. на самом деле я собираюсь изучить общие настройки следующим. так что проверим.

Ответ №2:

используйте длинный щелчок

  button = (Button) findViewById(R.id.button_view);
button .setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        shortclick();
    }
 });

button .setOnLongClickListener(new View.OnLongClickListener() {
public boolean onLongClick(View v) {
    longclick();
    return true;
}
  

});

 public void shortclick()
  

{
Toast.makeText(это: «Зачем ты это сделал? Это больно !!!», Тост.LENGTH_LONG).show();

}

public void longclick ()

 public void shortclick()
  

и другие одиночные клики

Ответ №3:

Вы можете определить статические логические переменные, которые будут сопоставлены с соответствующими кнопками. При нажатии кнопки сделайте переменную true . В зависимости от значения переменной вы можете выполнять свои действия.Нет необходимости изменять текст кнопок.

Комментарии:

1. на самом деле я пытался, но не смог сделать все успешно. можете ли вы показать мне пример.

Ответ №4:

// инициализировать значение

 boolean isButton1 = false;
  

// метод щелчка

 @Override
    public void onClick(View view) {
    switch(view.getId()){

    case R.id.button1:

    isButton1 != isButton1;
      if (isButton1) {

        R1btn.setBackgroundColor(Color.RED); 
        R2btn.setBackgroundColor(Color.GREEN)); 
        R3btn.setBackgroundColor(Color.GREEN)); 

        TextView rTV  = (TextView) findViewById(R.id.rTV);
            rTV.setText(R1);

    }   else  {

            Intent intent = new Intent(Activity2.this, Activity3.class);
            startActivity(intent);

    }
    break;

}
}
  

Ответ №5:

Вот пример, когда кто-то создал свой собственный класс кнопок, который меняется с значка воспроизведения на значок паузы.

Это довольно хороший способ, потому что весь код находится в одном центральном месте.

https://github.com/CyanogenMod/android_packages_apps_Apollo/blob/085099c04708d75380b1c996094dbdc7dc0a11a0/src/com/andrew/apollo/widgets/PlayPauseButton.java

Вам просто нужно добавить статическое логическое значение для «запоминания», если кнопка сейчас находится на «воспроизведение или пауза»

Затем вы можете проверить это (например, в методе updateState) и изменить внешний вид в зависимости от текущего состояния.

 static boolean isPlay = true;
public void updateState() {
        if (isPlay) {
            //Change appearance
            isPlay = false;
        } else {
            //Change appearance
            isPlay=true;
        }
    }