在View.OnCLickListener中侦听onActivityResult

时间:2014-05-07 15:16:46

标签: java android button android-intent

所以问题如下:

我在代码中生成contentView多个forforeach循环,并且动态生成按钮的所有侦听器。但是,如果我想在某些TextView或其他内容中进行更改,我会启动一个新的Activity,并且我想在侦听器内的onActivityResult上进行侦听。 我想知道这是否可能,我真的可以使用一些帮助。

这是我的代码:

    Button goliButton = new Button(this);
        goliButton.setText("+");
        goliButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent i = new Intent(TekmaLive.this,DodajStrel.class);
                i.putExtra("MINUTA", currTime /1000 + cetrtina * 15 * 60);
                i.putExtra("TEKMA", tekmaId);
                i.putExtra("IGRALKA", Integer.parseInt(igralka[0]));
                i.putExtra("GOL", true);
                TekmaLive.this.startActivity(i);
                //Insted of startActivity I would use startActivityForResult...
            }
        });

2 个答案:

答案 0 :(得分:0)

我在您的代码中看到您正在使用startActivity。如果您想要结果,请使用startActivityForResult

onActivityResult是一种属于ActivityFragment的方法。如果您从startActivityForResult致电Activity,那么当您的子活动调用onActivityResult方法时,系统会调用该活动实例的相应finish

您可以执行的操作是让您的活动实施View.OnClickListener。这样,您的结果将在侦听器中返回。

答案 1 :(得分:0)

您不能让方法“等待”活动返回其结果,如果这就是您要求的原因,则startActivity()是异步的。但是,您可以通过“记住”触发事件的按钮来实现相同的效果,即通过在您的活动中引用变量(pressedButton)来引用它。

    final Button goliButton = new Button(this);  // <---
    goliButton.setText("+");
    goliButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent i = new Intent(TekmaLive.this,DodajStrel.class);
            i.putExtra("MINUTA", currTime /1000 + cetrtina * 15 * 60);
            i.putExtra("TEKMA", tekmaId);
            i.putExtra("IGRALKA", Integer.parseInt(igralka[0]));
            i.putExtra("GOL", true);
            TekmaLive.this.pressedButton = goliButton;  // <---
            TekmaLive.this.startActivityForResult(i, YOUR_REQUEST_CODE);  // <---
        }
    });

然后只需在onActivityResult()中读取pressedButton。

此外,您应该使用startActivityForResult()而不是startActivity(),以便之后调用onActivityResult()。