将数据从Activity传递到Fragment with Activity,然后返回一次选项

时间:2016-05-03 10:47:25

标签: java android android-fragments

我尝试从某人选择的活动中获取数据。以下是对我正在做什么的更多理解。

我有一个名为PromptsActivity的活动,列出了用户可以选择的所有选项。即。 "我想要一件红色衬衫而不是白色衬衫"。

所以在PromptsActivity中我做了一个网络调用,它给了我需要用户选择的提示。

当他们点击其中一个提示时,它会将他们带到另一个内部有片段的Activity。

在onClickListener中我的意图如下:

    radioButtonLL.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        Intent i = new Intent(PromptsActivity.this, PromptsRadioButtonActivity.class);
        i.putExtra(PARCEL_OPTIONS_KEY, prompt);
        startActivityForResult(i, RADIO_BUTTON_CODE);
      }
    });

因此,当他们单击提示时,它会将它们带到相关活动并使用提示对象进行分段,这样我就可以显示用户可以选择的数据。

  1. 红色 - $ 5
  2. 蓝色 - $ 5
  3. 绿色 - $ 2
  4. 因此,对于每个选项,我都有一个onClickListener,当他们选择一个选项时

      radioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
          if (isChecked) {
            mInterface.selectedOption(radioButtonOption);
          }
        }
      });
    

    托管Fragment的活动正在实现接口:

    public class PromptsRadioButtonActivity extends BaseActivity implements SelectedDataInterface {
    
    ... other code
    
    @Override
        public void onBackPressed() {
          super.onBackPressed();
          if (mOption != null){
            Intent i = new Intent();
            i.putExtra(PromptsActivity.RADIO_BUTTON_SELECTED, mOption);
            setResult(PromptsActivity.RESULT_OK, i);
            finish();
          }
        }
    
        @Override
        public void selectedOption(Option option) {
          if (option != null) {
            mOption = option;
          }
        }
    

    现在在PromptsActivity中我已经覆盖了onActivityResult方法,这是我目前在该方法中的代码:

          @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK && requestCode == PromptsActivity.RADIO_BUTTON_CODE) {
          Option option = data.getParcelableExtra(RADIO_BUTTON_SELECTED);
          Log.e("radio button result Ok", option.getText());
          Toast.makeText(PromptsActivity.this, "Selected Radio button is: " + option.getText(), Toast.LENGTH_SHORT).show();
        }
        Log.e("radio bttn result null", "failed");
    
      }
    

    出于某种原因,Log.e(" radio bttn result null"," failed");线总是被叫,我不能为我的生活找出原因?

    我在这里要做的是将选择的选项传递回PromptsActivity,这样我就可以,最后在提示列表中显示他们选择的内容,以及发送选中的选项到网络服务。

2 个答案:

答案 0 :(得分:1)

打印Log.e("radio bttn result null", "failed");的原因是因为您没有将其包含在else块中 - 因此无论如何都会执行此代码 - 请将其包含在else块中,如下所示:

@Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK && requestCode == PromptsActivity.RADIO_BUTTON_CODE) {
      Option option = data.getParcelableExtra(RADIO_BUTTON_SELECTED);
      Log.e("radio button result Ok", option.getText());
      Toast.makeText(PromptsActivity.this, "Selected Radio button is: " + option.getText(), Toast.LENGTH_SHORT).show();
    }
else{
    Log.e("radio bttn result null", "failed");
}

  }

答案 1 :(得分:1)

而不是RESULT_OK尝试这可能会帮助你,

     if (resultCode == PromptsActivity.RESULT_OK && requestCode == PromptsActivity.RADIO_BUTTON_CODE) {
         ..........
      }else{
         .........
      }