我的问题,尤其是提到已经创建的祝酒词。
例如我有一个已创建的祝酒词:
Toast myToast;
// ...
protected void onCreate(Bundle savedInstanceState) {
// ...
myToast = Toast.makeText(getApplicationContext(), "Welcome", Toast.LENGTH_SHORT);
我对两个动作的更新方式不同:
if (answerGiven != correctAnswer) {
myToast.setText("Wrong");
View view = myToast.getView();
TextView text = (TextView) view.findViewById(android.R.id.message);
text.setTextColor(Color.RED);
text.setTextSize(32);
myToast.setGravity(Gravity.CENTER, 0, 0);
} else {
View view = myToast.getView();
TextView text = (TextView) view.findViewById(android.R.id.message);
text.setTextColor(Color.BLACK);
text.setTextSize(32);
myToast.setText("+" + bonus);
myToast.setGravity(Gravity.TOP|Gravity.RIGHT, 20, 20);
}
myToast.show();
这两项行动都很好!但是,如果我快速点击屏幕并激活第二个动作,则在吐司消失之前,即使消息更新,重力也不会改变。
例如:如果我选择了错误的答案,那么"错误"消息显示在屏幕中间:
然后我立即选择写回答奖励消息出现在屏幕中间(即使我告诉它设置setGravity(Gravity.TOP|Gravity.RIGHT, 20, 20);
)
(注意:如果我等到"错误"消息消失,然后点击正确的答案,奖励消息会显示在左上角,如预期的那样)
我想要做的是始终将奖励消息放在左上角。即使用户点击快速。所以我在问:有没有办法可以取消之前的吐司,以便新消息显示在正确的位置。或者我应该做些什么(例如刷新我的活动),以便消息显示在正确的位置。
答案 0 :(得分:2)
您应该在显示新的Toast消息之前取消当前的吐司。
if (myToast != null) {
myToast.cancel();
}
// your code ...
答案 1 :(得分:2)
我已经编写了一个下面的示例代码,并且正在运行。请看一下
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btnAddData;
private TextView tv;
private EditText et;
private boolean check;
Toast myToast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myToast = Toast.makeText(getApplicationContext(), "Welcome", Toast.LENGTH_SHORT);
btnAddData = findViewById(R.id.btn_add_record);
btnAddData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (check) {
if (myToast.getView().isShown())
myToast.cancel();
check = false;
myToast = Toast.makeText(getApplicationContext(), "Welcome", Toast.LENGTH_SHORT);
myToast.setGravity(Gravity.CENTER, 0, 0);
myToast.show();
} else {
if (myToast.getView().isShown())
myToast.cancel();
check = true;
myToast = Toast.makeText(getApplicationContext(), "Welcome", Toast.LENGTH_SHORT);
myToast.setGravity(Gravity.TOP | Gravity.RIGHT, 20, 20);
myToast.show();
}
}
});
}
您需要在xml中创建一个按钮并对其进行测试,如果您遇到任何问题,请告诉我。此外,您可以根据需要进行调整。
答案 2 :(得分:1)
你应该使用
如果正在显示,请关闭
view
,如果尚未显示,请关闭它。你通常不必打电话给这个。通常view
会在适当的持续时间后自行消失。
试试这个
if (myToast!= null) {
myToast.cancel();
}
if (answerGiven != correctAnswer) {
myToast.setText("Wrong");
myToast.setGravity(Gravity.CENTER, 0, 0);
} else {
myToast.setText("+" + bonus);
myToast.setGravity(Gravity.TOP|Gravity.RIGHT, 20, 20);
}