您可以以多种方式请求用户输入,但如果您想要使用新的 Activity
,可以使用 startActivityForResult()
启动新活动并从那里返回输入。
首先,我强烈建议阅读关于如何使用 startActivityForResult()
的此 Stack Overflow 答案。我将解释如何为您的特定用例实现它。
所以,您需要了解 startActivityForResult()
有两个参数:
Intent
(用于在活动之间传递数据)
- 标识您请求的“请求代码”整数
最好使用常量作为您的请求代码,在两个活动中都可以访问。例如,在您的主活动中,您可以添加:
public static final int REQUEST_CODE = 1;
由于它是“public”,所以在这两个活动中都可以访问,并且因为它是一个“int”(整数),所以对于请求代码也有效。
在您的主要活动中,您需要一种操作(例如按钮按下)来启动第二个活动。假设这是一个按钮点击触发此操作:
Button button = (Button) findViewById(R.id.your_button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(this, SecondActivity.class);
startActivityForResult(intent, REQUEST_CODE);
}
});
基本上,我们正在创建一个意图(Intent
),其中指定了我们当前的活动(this
)和第二个活动。 我们将意图与之前声明的REQUEST_CODE
一起在startActivityForResult()
方法中使用。
现在,在我们的第二个活动中,我们需要某些东西来触发返回数据。 根据您先前提出的问题,我假设您希望在单击RecyclerView
项时将数据返回到主活动。 这里是我对那个问题的部分回答,已修改以显示如何发送数据回来。
ExampleClickAdapter clickAdapter = new ExampleClickAdapter(yourObjects);
clickAdapter.setOnEntryClickListener(new ExampleClickAdapter.OnEntryClickListener() {
@Override
public void onEntryClick(View view, int position) {
Intent intent = new Intent();
intent.putExtra("pos", position);
setResult(Activity.RESULT_OK, intent);
finish();
}
});
recyclerView.setAdapter(clickAdapter);
以上将返回从点击RecyclerView
的列表项的位置。
看一下Intent
的putExtra()
方法。这就是传递数据的方法。你可以看到在这个方法中我传递了一个字符串"pos"
和变量position
,但为什么呢:
intent.putExtra("key", object);
Intent
的putExtra
方法总是使用一个字符串键和另一个对象,比如你的整数变量position
。当检索此对象时,将再次使用该键(稍后我会向你展示)。
我们使用Activity.RESULT_OK
来表示我们正在传递结果,但如果您不想发送结果,可以使用Activity.RESULT_CANCELED
- 这在我在开头提到的答案链接中有解释。请注意,如果使用Activity.RESULT_CANCELED
,则不需要使用putExtra
,因为没有任何内容需要返回。
最后,您需要在主活动中添加一些内容,以处理从第二个活动接收到的结果:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
int result = data.getIntExtra("pos");
} else if (resultCode == Activity.RESULT_CANCELED) {
}
}
}
我们使用onActivityResult
方法来实现这个功能。
在这个方法的开头,我们会检查requestCode
是否与我们之前定义的一个公共常量REQUEST_CODE
相同。
如果是,我们就继续检查返回结果的resultCode
。如果有数据被返回(Activity.RESULT_OK
),我们可以使用getIntExtra()
方法获取其值,因为position
是一个整数(如果返回的是字符串,则可以使用getStringExtra()
方法)。然后你就可以对返回的数据进行操作。但是,如果没有数据被返回(正如我们之前提到的Activity.RESULT_CANCELED
),那么你可以执行其他操作。
希望这能帮助你实现你的想法,但是通过Google搜索也可以找到我上面提到的答案(这里是链接),其中清楚地解释了如何使用startActivityForResult()
方法。其他回答也很好地解释了这个问题,但也许你需要指导如何在你的用例中实现它(即与你之前提出的问题的代码结合起来),这就是我提供上面的解释的原因。
你还可以阅读Android文档的从Activity获取结果,以及startActivityForResult()
方法和Intent
的Android文档。