簡體   English   中英

將數據從“活動”傳遞到帶有“活動”的片段,然后在選擇了選項后返回

[英]Pass data From Activity, to Fragment with Activity, then back once option is selected

我試圖從某人選擇的活動中獲取數據。 這里是我在做什么的更多理解。

我有一個名為PromptsActivity的活動,其中列出了用戶可以選擇的所有選項。 即。 “我想要一件紅色的襯衫,而不是一件白色的襯衫”。

因此,在PromptsActivity中,我進行了一個網絡呼叫,該網絡呼叫給了我我需要用戶選擇的Prompts。

當他們單擊一個提示時,會將他們帶到其中有片段的另一個活動。

在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美元

因此,對於每個選項,我都有一個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,這樣我最終可以在“提示”列表中顯示他們選擇的內容,並將選擇的選項發送回Web服務。 。

原因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");
}

  }

代替RESULT_OK嘗試,這可能會幫助您,

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM