Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果Toast已显示,则Toast位置不会更新_Android_Location_Toast_Gravity - Fatal编程技术网

Android 如果Toast已显示,则Toast位置不会更新

Android 如果Toast已显示,则Toast位置不会更新,android,location,toast,gravity,Android,Location,Toast,Gravity,特别是我的问题,是关于已经制作的烤面包的提神 例如,我有一个已经创建的祝酒词: Toast myToast; // ... protected void onCreate(Bundle savedInstanceState) { // ... myToast = Toast.makeText(getApplicationContext(), "Welcome", Toast.LENGTH_SHORT); 我根据两个动作对其进行了不同的更新: if (answerGiven

特别是我的问题,是关于已经制作的烤面包的提神

例如,我有一个已经创建的祝酒词:

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();
两个动作都很好!但是,如果我快速点击屏幕并在烤面包片消失之前激活第二个动作,即使消息更新,重力也不会改变

例如:如果我选择了错误的答案,而“错误”的消息显示在屏幕中部:

然后我立即选择写答案,奖励信息出现在屏幕中间(即使我告诉它设置<代码> StestRead(重力,Gravity.RIGHT,20, 20);)

(注意:如果我等待“错误”消息消失,然后单击正确答案,奖金消息将按预期显示在左上角)

我希望它总是把奖金信息放在左上方。即使用户点击快速。所以我在问:有没有一种方法可以取消之前的祝酒词,从而在正确的位置显示新的祝酒词。或者我应该做些什么(例如刷新我的活动),以便消息显示在正确的位置。

您应该使用

如果正在显示,请关闭
视图
,如果尚未显示,则不显示。通常情况下,您不必将其称为。通常,
视图
会在适当的持续时间后自行消失

试试这个

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);
}

您应该在显示新的toast消息之前取消当前toast

if (myToast != null) {
    myToast.cancel();
}

// your code ...

我已经写了一个下面的示例代码,这是有效的。请看一看

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制作一个按钮并进行测试,如果遇到任何问题,请告诉我。此外,您还可以根据需要进行调整。

感谢您的快速响应,不幸的是,现在祝酒词根本没有显示出来???嗯。。。还是没有出现。我的代码的其余部分与祝酒词无关,但可能还有其他问题。你有什么想法可以让祝酒被取消后不再出现?(更新了文章中的更多代码)在
Toast.cancel()
之后,我解决了问题,必须重新创建Toast。我使用的是
Toast.setText()
,但当我将代码更改为
Toast.makeText()
时,它就成功了!谢谢你的帮助!我很高兴这有助于:)快乐编码