Android StartActivityForResult和Finish(附视频)

4
我有一个MainActivity类,其中包含一个“添加项目”按钮、一个列表视图和一个AddItemActivity类,其中包含一个文本框和一个“保存”按钮。用户应该点击“添加项目”按钮,进入AddItemActivity屏幕,输入一个项目,点击“保存”,然后返回更新后的MainActivity屏幕。
(顺便说一句,我正在使用MonoDroid,但我认为这不是一个特定于MonoDroid的问题)。
我的“添加项目”点击事件(在主活动上):
    private void addItemButton_Click(object sender, EventArgs e)
    {
        var intent = new Intent();
        intent.SetClassName(this, "monoApp.AddItemClassName");
        StartActivityForResult(intent, 0);
    }

我的“保存”点击事件(在添加项目活动中):

    private void saveButton_Click(object sender, EventArgs e)
    {
        var itemname = FindViewById<EditText>(Resource.id.itemName);

        _repo.SaveItem(new Item() {Name = itemname.Text.ToString()});

        Toast.MakeText(this, "You saved: " + itemname.Text, ToastLength.Short).Show();

        var intent = new Intent();
        SetResult(Result.Ok, intent);
        Finish();
    }

接着回到主活动:

    protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
    {
        base.OnActivityResult(requestCode, resultCode, data);

        RefreshTheList();
    }

这个功能第一次使用时非常好用。屏幕滑动到“添加项目”,完成后又滑回到主界面。但第二次使用时,它会滑到“添加项目”,然后又滑回到“本身”,如果这样说有意义的话。然后,如果我再次点击保存,它就又正常工作了。
如果需要视频帮助,我已经在TwitVid上发布了一个剪辑:http://www.twitvid.com/W7XZC 基本上,我不想让它“滑回到自己”,那么我做错了什么?
1个回答

5

我在你的代码中没有看到任何问题...这里是我的猜测。

你的第二个活动可能在第二次尝试中从代码的剩余部分中被多次启动。

在addItemButton_Click中打印一个日志并检查。如果日志被打印两次,则它会以某种方式调用该方法两次。


4
不要低估第二双眼睛的力量 :) 记录起来了——点击事件方法被误绑定了两次,导致它被触发了两次。谢谢! - Matthew Groves

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接