我尝试从某人选择的活动中获取数据。以下是对我正在做什么的更多理解。
我有一个名为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);
}
});
因此,当他们单击提示时,它会将它们带到相关活动并使用提示对象进行分段,这样我就可以显示用户可以选择的数据。
因此,对于每个选项,我都有一个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,这样我就可以,最后在提示列表中显示他们选择的内容,以及发送选中的选项到网络服务。
答案 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{
.........
}