onActivityResult未在自定义片段或其他任何其他尝试中调用

时间:2014-09-22 18:04:01

标签: android android-fragments

这个问题有很多成功的答案,但我仍然没有理解或者我做错了。一个答案是在主持人onActivityResult中实施Activity,但我想我不知道哪个是错误的,或者我错了。

不,我没有打电话给getActivity.startActivityForResult(),只是startActivityForResult()

根据FirstActivity中的选择,可以使用Fragments创建一个或多个其他选项。一个FragmentButtonFragment,选中后会启动OptionsActivity,如下所示:

public class ButtonFragment extends Fragment
{
  .....

  @Override
  public void onActivityResult(int requestCode, int resultCode, Intent data)
  {
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode != Activity.RESULT_CANCELED)
    {
       if(requestCode == OPTIONS_REQUEST_CODE)
       {
          Bundle extras = data.getExtras();
          if (extras != null) {
             String selection = (String) extras.get("optionsSelection");
             data.setText(selection);
          }
       }
    }
  }

  private void openOptionsActivity()
  {
     Intent intent = new Intent(getActivity(), OptionsActivity.class);
     intent.putExtra("optionsArray", options);
     startActivityForResult(intent, OPTIONS_REQUEST_CODE);
  }
}

此片段已添加到BaseActivity

public class BaseActivity extends FragmentActivity
{
  .....

    fm.beginTransaction().add(
            R.id.FragmentContainer, frag).commitAllowingStateLoss();
    fm.executePendingTransactions();

  @Override
  public void onActivityResult(int requestCode, int resultCode, Intent data)
  {
     super.onActivityResult(requestCode, resultCode, data);
     finish();
  }
}

内部OptionsActivity

public class OptionsActivity extends BaseSpinnerActivity
{
  .....

  private class OptionsAdapter extends BaseSpinnerAdapter
  {
    public OptionsAdapter(Context context, Object[] values)
    {
       super(context, values);
    }

    protected void fillRow(ViewHolder holder, int position)
    {
       String option = options[position];

       if(option != null) {
          holder.text.setText(option);
       }
    }

    protected void onRowSelect(View v)
    {
       Intent returnIntent = new Intent();
       String optionSelection = (String)v.getTag();
       returnIntent.putExtra("optionSelected", optionSelection);
       setResult(RESULT_OK, returnIntent);
       finish();
    }
  }

  @Override
  public void onActivityResult(int requestCode, int resultCode, Intent data)
  {
    super.onActivityResult(requestCode, resultCode, data);
    finish();
  }
}

同样的事情在BaseSpinnerActivity内完成,从ListActivity延伸。 (我知道,应该使用FragmentActivity,但我还没有机会转换它。)

这些onActivityResult()都没有被调用。

我错过了什么或做错了什么?任何帮助表示赞赏!

0 个答案:

没有答案