Класс утилит для объекта Android Toast - PullRequest
0 голосов
/ 18 мая 2018

Я решил написать свой собственный класс Utility для Toast, чтобы вырезать повторяющийся код

public class Utilities {

public static void initializeToast(Context context, Toast toast, String res) {
    cancelToast(toast);
    toast = Toast.makeText(context, res, Toast.LENGTH_SHORT);
    toast.show();
}

public static void cancelToast(Toast toast){
    if (toast != null) {
        toast.cancel();
    }
}
}

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

public class AddGroupActivity extends AppCompatActivity {

private EditText mEditWordView;
private Toast toast;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_group);
    mEditWordView = findViewById(R.id.editText);
    final Button button = findViewById(R.id.add_group_button);
    button.setOnClickListener(view -> {
        if (TextUtils.isEmpty(mEditWordView.getText())) {
            Utilities.initializeToast(this, toast, "Message Example");
        }
    });
}
}

Когда я нажимаю кнопку несколько раз, я получаю сложенные тосты - предыдущие тосты не уничтожаются.Поэтому мне нужна помощь, чтобы определить, почему он так себя ведет.

ОБНОВЛЕНИЕ Ранее я написал тост-код внутри класса деятельности, и он работал отлично.Например:

public class AddGroupActivity extends AppCompatActivity {

private EditText mEditWordView;
private Toast toast;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_group);
    mEditWordView = findViewById(R.id.editText);
    final Button button = findViewById(R.id.add_group_button);
    button.setOnClickListener(view -> {
        if (TextUtils.isEmpty(mEditWordView.getText())) {
            initToast("Message");
        }
    });
}

private void cancelToast() {
    if (toast != null) {
        toast.cancel();
    }
}

@Override
protected void onDestroy() {
    super.onDestroy();
    cancelToast();
}

private void initToast(String res) {
    cancelToast();
    toast = Toast.makeText(this, res, Toast.LENGTH_SHORT);
    toast.show();
}
}

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Я наконец нашел проблему.Спасибо за комментарий от Владислава Матвиенко.Мое личное поле было инициализировано как локальная переменная, которая уничтожалась после каждого вызова метода, и таким образом cancelToast (toast) не принес никакого эффекта.

Класс утилит

public class Utilities {

public static Toast initializeToast(Context context, Toast toast, String res) {
    cancelToast(toast);
    return Toast.makeText(context, res, Toast.LENGTH_SHORT);
}

public static void cancelToast(Toast toast) {
    if (toast != null) {
        toast.cancel();
    }
}
}

Пример класса клиента

public class AddGroupActivity extends AppCompatActivity {

private EditText mEditWordView;
private Toast toast;

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_add_group);
  mEditWordView = findViewById(R.id.editText);
  final Button button = findViewById(R.id.add_group_button);
  button.setOnClickListener(view -> {
    if (TextUtils.isEmpty(mEditWordView.getText())) {
        toast = Utilities.initializeToast(this, toast, "Message Example");
        toast.show();
    }
});
}
}
0 голосов
/ 18 мая 2018
public static void initializeToast(Context context, Toast toast, String res) {
    cancelToast(toast);
    if(toast == null){ // prevent create many instance of toast
       toast = Toast.makeText(context, res, Toast.LENGTH_SHORT);
    }else{
       toast.setText(res);
    }
    toast.show();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...