android - Android Toast 对象的实用程序类
问题描述
我决定为 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");
}
});
}
}
当我多次单击按钮时,我得到了堆积的祝酒词——以前的祝酒词没有被破坏。所以我需要帮助来定义它为什么会这样。
更新 早些时候,我在活动类中编写了 toast 代码,它运行良好。例如:
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();
}
}
解决方案
我终于找到了问题所在。感谢 Vladyslav Matviienko 的评论。我的私有字段被初始化为局部变量,该变量在每次调用该方法后都被销毁,这样 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();
}
});
}
}
推荐阅读
- python - 如何在python中将dotx文件转换为html文件?
- javascript - env-cmd 错误未能在 gatsby 中找到 ./.env 文件?
- symfony - 在树枝中显示自引用实体
- objective-c - 如何在objective-c的文档中引用变量或const?
- python - 如何解析此 JSON 响应以仅获取字段的子集?
- javascript - 计算 bmi 并返回字符串的函数
- c - 这个程序的预期输出是什么?
- c# - 使用加密将 web.config 迁移到 appsettings.json | ASP.NET MVC 到 ASP.NET CORE
- vb.net - 如何在登录时将数据库中的加密密码与新输入的密码进行比较?
- oracle - 无论如何要在 utl_file 中放置一个程序以在 plsql 中打印部分文件内容?