【问题标题】:Delaying toast from the send button according to spinner in Android [duplicate]根据Android中的微调器延迟发送按钮的吐司[重复]
【发布时间】:2018-08-11 18:26:16
【问题描述】:

可能重复:
Android: Toast won't delay on spinner

我想延迟吐司“您的消息“消息”发送到“联系人”根据用户在微调器中选择的延迟出现。以下代码有错误(pos),这是我的代码:

Handler handler = new Handler();
spinnerTimeDelay = (Spinner) findViewById(R.id.spinner_delay);
spinnerTimeDelay.setOnItemSelectedListener(this);
        ArrayAdapter<String> aa=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,items);
        aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerTimeDelay.setAdapter(aa);

public void onItemSelected(AdapterView<?> parent,
            View view, int pos, long id) {
        if(FirstLoad){
            FirstLoad = false;
            return;                         
        }
Toast.makeText(parent.getContext(), "You chose " + 
                  parent.getItemAtPosition(pos).toString()+ " to delay", Toast.LENGTH_LONG);
}

        public void onNothingSelected(AdapterView<?> parent) {
          return;
        }

btnSend.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    String phoneNo = editTextRecipient.getText().toString();
                    String message = editTextNewMessage.getText().toString(); 
                    boolean split = false;

                final Toast toast = Toast.makeText(getBaseContext(), 
                         "Your message " + "\"" + message + "\"" + " is sent to " +"\""+ phoneNo+"\"", 
                          Toast.LENGTH_SHORT);1

                Runnable showToastRunnable = new Runnable() {
                  public void run() {
                      toast.show();
                  }
              };

                if (phoneNo.length()>0 && message.length()>0)  {
                    if (pos == 0) {
                          handler.postDelayed(showToastRunnable, 0);
                      }
                      else if (pos == 1) {
                          handler.postDelayed(showToastRunnable, 15000);
                      }
                      else if (pos == 2) {
                          handler.postDelayed(showToastRunnable, 30000);
                      }
                      else if (pos == 3) {
                          handler.postDelayed(showToastRunnable, 60000);
                      }
                }

                else
                    Toast.makeText(getBaseContext(), 
                        "Please enter both phone number and message.", 
                        Toast.LENGTH_SHORT).show();
            }
        });        
    }

我应该如何声明位置?

【问题讨论】:

  • 我可以在第一个 Toast 的末尾看到一个“1”。
  • 请分享所有相关代码。在这里看不到变量 pos 和处理程序
  • 请发布 logcat 错误!
  • 我已经编辑过了,唯一的错误是发送按钮方法上的(pos)。
  • 不要创建一个全新的问题,您应该使用此处答案的评论详细信息更新您之前的问题:stackoverflow.com/questions/7976474/…

标签: android spinner delay toast


【解决方案1】:

只需全局声明一个 int 变量 (int count=0) 并存储所选微调器项目的位置 (count=pos) 并在您的 sendButton 的 onClick() 的 if-else 条件 (if(count==1)) 中使用该 int 变量

试试这个,

private int count=0;
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
Handler handler = new Handler();
spinnerTimeDelay = (Spinner) findViewById(R.id.spinner_delay);
spinnerTimeDelay.setOnItemSelectedListener(this);
        ArrayAdapter<String> aa=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,items);
        aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerTimeDelay.setAdapter(aa);

public void onItemSelected(AdapterView<?> parent,
            View view, int pos, long id) {

           count=pos;
        if(FirstLoad){
            FirstLoad = false;
            return;                         
        }
}

        public void onNothingSelected(AdapterView<?> parent) {
          return;
        }

btnSend.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    String phoneNo = editTextRecipient.getText().toString();
                    String message = editTextNewMessage.getText().toString(); 
                    boolean split = false;

                final Toast toast = Toast.makeText(getBaseContext(), 
                         "Your message " + "\"" + message + "\"" + " is sent to " +"\""+ phoneNo+"\"", 
                          Toast.LENGTH_SHORT);1

                Runnable showToastRunnable = new Runnable() {
                  public void run() {
                      toast.show();
                  }
              };

                if (phoneNo.length()>0 && message.length()>0)  {
                    if (count == 0) {
                          handler.postDelayed(showToastRunnable, 0);
                      }
                      else if (count == 1) {
                          handler.postDelayed(showToastRunnable, 15000);
                      }
                      else if (count == 2) {
                          handler.postDelayed(showToastRunnable, 30000);
                      }
                      else if (count == 3) {
                          handler.postDelayed(showToastRunnable, 60000);
                      }
                }

                else
                    Toast.makeText(getBaseContext(), 
                        "Please enter both phone number and message.", 
                        Toast.LENGTH_SHORT).show();
            }
        });        
    }

【讨论】:

  • 好的,非常感谢。这解决了我的问题:)
  • 我想在用户按下发送按钮时放置一个进度对话框,当消息发送的祝酒词时,进度对话框出现然后消失。我的意思是,进度对话框的持续时间与 toast 相同,我应该如何实现呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-15
相关资源
最近更新 更多