[英]Pass data from Activity to Fragment in another Activity
[英]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);
}
});
因此,當他們單擊“提示”時,它將帶他們進入相關活動並帶有提示對象的片段,因此我可以顯示用戶需要選擇的數據。
因此,對於每個選項,我都有一個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.