【问题标题】:AlertDialog box Repeats four times警报对话框重复四次
【发布时间】:2014-09-30 10:31:28
【问题描述】:

好的,我的问题比标题大得多。但不能描述标题中的所有内容。所以我们开始吧。

我正在编写一个应用程序,当手机检测到 NFC 卡时,它将能够在其上写入和读取 NDEF 消息。

我使用两个按钮 READ 和 WRITE 来触发这些事件。一切正常,只是 一切都重复四 (4x) 次!

只有标签“UltraLightCard Detected”和“Connected”弹出一次。 您在“ShowMessage”中的代码中看到的其他所有内容都会弹出 4 次,AlertDialog 框也会被触发 4 次,您必须编写 4 次文本。 如果你只写了一次,然后点击“保存”3次只是为了关闭它,它不会存储字符串。

这是我的代码:

protected void ultralightCardLogic() {
    final Button b_write = (Button)findViewById(R.id.b_write);
    final Button b_read = (Button)findViewById(R.id.b_read);

    b_write.setId(1);
    b_read.setId(2);
    //showImageSnap(R.drawable.ultralight);
    ShowMessage("UltraLight Card Detected :" + mifareUL.getTagName(), 'a');

    try {
        mifareUL.connect();
        mifareUL.formatT2T();
        ShowMessage("Connected!" , 'd');
        b_write.setOnTouchListener(new MyTouchListener());
        b_read.setOnTouchListener(new MyTouchListener());
    } catch (IOException e) {
        e.printStackTrace();
    }

}

这是 MyTouchListener:

public class MyTouchListener implements OnTouchListener{

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stu
        int id = v.getId();
        switch(id){
            case 1:
                onCreateDialog();
                break;
            case 2:
                readNDEFmsg();
                break;
            case 3:
                break;              
        }
        return false;
    }

}

这是 OnCreateDialog:

final View v = getLayoutInflater().inflate(R.layout.dia_box,null);
AlertDialog.Builder builder = new AlertDialog.Builder(this)
    .setView(v)
    .setPositiveButton("SAVE", new DialogInterface.OnClickListener(){

        @Override
        public void onClick(DialogInterface dialog, int id) {
            // TODO Auto-generated method stub
            final EditText mEdit=(EditText)v.findViewById(R.id.et_dia);
            String str = mEdit.getText().toString();
            writeNDEFmsg(str);
            dialog.dismiss();
        }

    });
AlertDialog alert = builder.create();
alert.show();

如果你们需要更多代码,我可以添加它。不想写太多代码,因为我的经验告诉我,这样就没有人会尝试帮助我了。

请帮帮我

【问题讨论】:

  • 您在按钮上添加了一个 TouchListener 是否正确?为什么不使用 onClickListener?
  • ^^^ 我也是这么想的
  • 天哪。确实可能是这样!我将尝试使用 Click Listener 并尽快报告!
  • 不,不一样。只需使用 clickListener 尝试一下,我不确定这是否会导致您的行为,但可能会。因为 onTouchListener 会触发多个动作,例如 onPressed() onReleased() 等。
  • 当我想 setOnClickListener 它说我必须实现以下参数:(android.view.View.OnClickListener)。当我运行应用程序时,“写入”按钮现在不再触发。 LogCat 中有一个警告:java.lang.ClassCastExceptio: MyClickListener cannot be cast to android.view.View$OnClickListener

标签: java javascript android nfc android-alertdialog


【解决方案1】:

感谢您的帮助,我解决了我的问题。

我使用了onTouchListener,它触发了不止一次,因为它有更多可用的 MotionEvents。

在我更改为OnClickListener 后,一切顺利! 请务必实施 View.OnClickListener 如果你像我在我的公共 class MyClickListener 中那样做的话。

然后 Eclipse 会自动生成你需要的代码。提取按钮的 id 并执行 switch 语句(同样,如果您这样做的话):

public class MyClickListener implements android.view.View.OnClickListener{



        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            int id = v.getId();
            switch(id){
            case 1:
                onCreateDialog();
                break;
            case 2:
                readNDEFmsg();
                break;
            case 3:



                break;

            }

        }

再次感谢您的帮助!希望它也会对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    • 2013-06-26
    • 2017-09-14
    • 2019-12-19
    • 2018-05-10
    • 1970-01-01
    相关资源
    最近更新 更多