FET*_*FET 7 android android-fragments
在我的应用程序中,我需要快速 询问用户input.
我需要从这个 Flash-Activity 获得一个结果,然后回到上一个.
我已经读过这个StartActivityForResult()方法,但我还不确定如何正确使用它,任何例子?
编辑:
我试图通过intent(作为结果)使用我在应用于StartActivityForResult()的此方法的所有应用程序中使用的方法传递Player对象:
在我的第二个Activity(我需要得到结果的那个):
Intent intent = new Intent();
Player playerKilled = players.get(position);
Bundle bundle = new Bundle();
bundle.putSerializable("PLAYER_KILLED", (Serializable) playerKilled);
intent.putExtras(bundle);
setResult(Activity.RESULT_OK, intent);
finish();
我的主要活动,我需要将结果带到:
if (resultCode == Activity.RESULT_OK) {
    Intent intent = this.getIntent();
    Bundle bundle = intent.getExtras();
    playerKilled = (Player)bundle.getSerializable("PLAYER_KILLED");
    Toast.makeText(this, playerKilled.getName() + "the " + playerKilled.getCardName() + " has died, and he/she had the ID: " + playerKilled.getId(), Toast.LENGTH_SHORT).show();
Far*_*deh 15
您可以通过多种方式请求用户输入,但如果您想使用新的Activity,如上所述,我们可以使用它startActivityForResult()来启动新活动并从那里返回输入.
首先,我强烈建议您阅读有关如何使用的Stack Overflow回答startActivityForResult().我将解释如何为特定用例实现它.
所以,你需要了解它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) {
        // actions that will happen when the button is pressed:
        Intent intent = new Intent(this, SecondActivity.class);
        startActivityForResult(intent, REQUEST_CODE);
    }
});
基本上,我们正在创建一个Intent指定当前活动(this)和第二个活动.我们使用startActivityForResult()方法中的intent 和REQUEST_CODE我们之前声明的.
现在,在我们的第二个活动中,我们需要一些东西来触发返回的数据.从您提出的上一个问题开始,我假设您希望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()方法.这是传递数据的原因.你可以看到我在这个方法中传递了一个String "pos"和该项的变量position,但原因是:
intent.putExtra("key", object);
s 的putExtra方法Intent总是使用String键和另一个对象,例如整数变量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");
            // do something with the result
        } else if (resultCode == Activity.RESULT_CANCELED) {
            // some stuff that will happen if there's no result
        }
    }
}
我们使用这个onActivityResult方法.
在这个方法的开头,我们检查是否与requestCode我们之前定义的相同(作为公共常量REQUEST_CODE).
如果是这样,我们继续并检查resultCode结果是什么.如果数据被发送回(Activity.RESULT_OK),我们可以用它获取getIntExtra()的position是一个整数(同样使用getStringExtra(),如果你是返回一个字符串).然后,您可以对返回的数据执行某些操作.但是,如果没有发回数据(如前所述Activity.RESULT_CANCELED),您可以执行其他操作.
希望这可以帮助您实现您的想法,但谷歌搜索将找到我上面提到的答案(这里是链接),清楚地解释了如何使用   startActivityForResult().这个问题的其他答案也很好地解释了,但也许您需要有关如何在您的用例中实现它的指导(即与您之前的问题中的代码相结合),这就是我提供上述解释的原因.
你也可以阅读Android文档上充分利用的活性的结果为[以及Android文档startActivityForResult()方法](https://developer.android.com/reference/android/app/Activity.html#startActivityForResult(android.content .Intent,int))和Intents.
| 归档时间: | 
 | 
| 查看次数: | 30316 次 | 
| 最近记录: |