【问题标题】:startactivityforresult() inside a listener not calling onActivityResult()未调用 onActivityResult() 的侦听器内的 startactivityforresult()
【发布时间】:2015-10-15 11:43:05
【问题描述】:

我知道关于 SO 有很多类似的问题,但没有一个能解决我的问题。

我在 seekbar 监听器中调用 startActivityForResult。但是, onActivityResult 没有被调用。这是我的代码。可能出了什么问题?

public class PeopleActivity extends SherlockFragment {

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
    volumeControl.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            int progressChanged = 0;

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                progressChanged = progress;
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {


                Intent in = new Intent(getActivity(), com.mytest.mytestninja.RangingActivity.class);
                getActivity().startActivityForResult(in, 1);


            }

        });


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

        rangeValue.setText("CALLED");
    }

}

RangingActivity.java

public class RangingActivity extends Activity
@Override
    protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_ranging);

            Intent returnIntent = new Intent();
            returnIntent.putExtra("result", firstBeacon.toString());
            setResult(RESULT_OK, returnIntent);
            finish();
 }
}

更新

使用 PeopleActivity 片段的活动:

public class DrawerFrontActivity extends SherlockFragmentActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        bar = getSupportActionBar();
        Drawable myIcon = getResources().getDrawable( R.drawable.bluebar);
        bar.setBackgroundDrawable(myIcon);

        SherlockFragment fragment;
        fragment = new PeopleActivity();

        FragmentTransaction transaction =    getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.rlDrawerHome, fragment);       
        transaction.commit();

        setTitle("Home");
        bar.setTitle("Home");
}
}

【问题讨论】:

  • 发布你的目标类的setResult()代码,即RangingActivity。
  • 更新了目标类。我省略了 OnPause、OnDestroy 等默认方法,因为我没有对这些函数进行任何更改。
  • 在 onCreate() 中完成? Afaik 这将破坏活动的生命周期。您可以添加一个按钮并在单击该按钮时测试它是否有效?或者你可以尝试在 onResume() 中执行这个 sn-p。

标签: android android-fragments start-activity


【解决方案1】:

您似乎正在调用getActivity().startActivityForResult(in, 1);,这会将结果传递回活动,而不是自行分段。

尝试使用PeopleActivity.this.startActivityForResult(in, 1);,这应该会将结果传递回片段。

有关详细信息,请参阅此答案: https://stackoverflow.com/a/6147919/2146871

【讨论】:

  • 这不起作用。我试过 PeopleActivity.this.startActivityForResult(in, 1);
  • 您能否发布使用“PeopleActivity”片段的活动的代码?
  • 我已经用您要求的代码 sn-p 更新了问题。
  • 另外我猜你可以发布清单来帮助别人帮助你。
  • 我已经根据您发布的代码创建了一个快速复制项目。 github.com/CityVibes/TempActStartTest 看来我修复的项目确实有效。尝试将代码与您自己的项目进行比较,但现在我假设问题出在您未在此处发布的代码的其他部分。
【解决方案2】:

找到答案。 问题是因为我没有在我的片段活动 DrawerFrontActivity 中调用 super.onactivityresult。因此

【讨论】:

    猜你喜欢
    • 2017-04-27
    • 2014-08-11
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 2019-07-25
    相关资源
    最近更新 更多