在Android Studio中,无法多次从活动A调用活动B.

时间:2015-10-21 23:02:25

标签: java android android-activity android-studio

继我之前的帖子之后,我现在想要多次从主要活动调用一个子活动。在我的真实项目中(与下面的点头测试相反),当调用子活动时,其标题显示“输入第一个数据集”,然后邀请用户输入一些数据。此数据实际存储在公共类中,而不是返回到主活动。然后需要使用新的提示“输入第二个数据集”再次调用子进程,同样的事情发生。 我无法解决的是如何做到这一点。如果我对孩子进行两次调用,则每次只发生第二次调用时,子活动中出现的提示每次都是“输入第二个数据集”。我相信这个startActivityForResult()方法,设计用于你想要调用一个活动并等待结果(你用onActivityResult()你没有),但它不等待。

我该怎么做?示例代码如下。

感谢任何能够清楚地解释我哪里出错的人以及正确的代码应该是什么。

MainActivity代码提取

@Override
public void onResume(){
    super.onResume();
    TextView maintop = (TextView)findViewById(R.id.maintop);
    maintop.setText(Common.mess1);
}

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button mainbutton = (Button)findViewById(R.id.mainbutton);

    mainbutton.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View view)
        {
            Intent intent1 = new Intent(MainActivity.this,Child.class);
            intent1.putExtra("Prompt", "Enter first data set");
            startActivityForResult(intent1,1);
            onActivityResult(1,1,intent1);
        }

    });

    mainbutton.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View view)
        {
            Intent intent2 = new Intent(MainActivity.this,Child.class);
            intent2.putExtra("Prompt", "Enter second data set");
            startActivityForResult(intent2,1);
            onActivityResult(1,1,intent2);
        }
    });
}

1 个答案:

答案 0 :(得分:1)

按钮中只能有一个单击侦听器,因此当您第二次调用set时,它会替换侦听器。 你需要做的是设置输入第一个数据的点击监听器,不要调用onActivityResult(1,1,intent1),而不是你怎么做,你需要覆盖方法,并在onActivityResult中调用第二个。 像这样:

static final int FIRST_INTENT = 1;
static final int SECOND_INTENT = 2;

@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Button mainbutton = (Button)findViewById(R.id.mainbutton);

mainbutton.setOnClickListener(new View.OnClickListener()
{
    @Override
    public void onClick(View view)
    {
        Intent intent1 = new Intent(MainActivity.this,Child.class);
        intent1.putExtra("Prompt", "Enter first data set");
        startActivityForResult(intent1,FIRST_INTENT);
    }

});
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == FIRST_INTENT) {
        if (resultCode == RESULT_OK) {
            Intent intent2 = new Intent(MainActivity.this,Child.class);
            intent2.putExtra("Prompt", "Enter second data set");
            startActivityForResult(intent2,SECOND_INTENT);
        }
    }
}

在你的孩子活动中

//DO SOMETHING
....
setResult(RESULT_OK)
finish();
}

更多检查 [http://developer.android.com/intl/es/training/basics/intents/result.html] [http://developer.android.com/intl/es/reference/android/app/Activity.html#setResult%28int%29]