使用自定义幻灯片

时间:2018-01-05 09:52:14

标签: android android-fragments

我在自定义幻灯片片段中有一个带有复选框的recyclerview列表,并且应该具有在软件主要活动中检查哪些复选框的信息。澄清幻灯片片段是什么:它是一个定制片段,位于一个介绍活动中。从软件的主要活动调用介绍活动。我将材质介绍库用于here中的介绍部分。

到目前为止我尝试过:

我试图在幻灯片片段的onDestroy函数上添加一个额外的内容。代码如下:

@Override
public void onStop() {
    Intent returnIntent = new Intent();
    List<Topic> list = adapter.getAdded();
    String result = "";
    for(int i = 0; i < list.size(); i++){
        result += list.get(i).getName() + "-";
    }
    returnIntent.putExtra("sourceList",result);

    getActivity().setResult(Activity.RESULT_OK,returnIntent);
    super.onStop();
}

简介活动的代码如下: 公共类MainIntroActivity扩展了IntroActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setSkipEnabled(false);


    addSlide(new SimpleSlide.Builder()
            .background(R.color.Color_DarkGreen)
            .backgroundDark(R.color.Color_Black)
            .image(R.drawable.add_group)
            .title("Trial title")
            .description("Trial description")
            .build());//

    addSlide(new FragmentSlide.Builder()
    .background(R.color.Color_Blue)
    .backgroundDark(R.color.Color_DarkBlue)
    .fragment(SourceChooseFragment.newInstance())
    .build());


}}

我在主要活动的onCreate函数中使用以下代码创建MainIntroActivity:

    startActivityForResult(intent, 1);

我希望使用以下代码检索信息:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 1) {
        if(resultCode == Activity.RESULT_OK){
            String result = data.getStringExtra("sourceList");
        }
        if (resultCode == Activity.RESULT_CANCELED) {
            //Write your code if there's no result
            finish();
        }
    }
}

但是我收到了这个错误:

              java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {net.fred.feedex/net.fred.feedex.activity.HomeActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getStringExtra(java.lang.String)' on a null object reference

我哪里出错了,将幻灯片中的信息发送到主要活动的正确方法是什么?

如果这是一个糟糕的问题,请告诉我并告诉我如何改进它。

度过愉快的一天。

编辑1:我注意到没有调用onDestroy函数,所以我用onStop函数替换了它。现在正在调用,但问题仍然存在。

2 个答案:

答案 0 :(得分:0)

您应该尝试显式调用finish()。

@Override
public void onDestroy() {
    Intent returnIntent = new Intent();
    List<Topic> list = adapter.getAdded();
    String result = "";
    for(int i = 0; i < list.size(); i++){
        result += list.get(i).getName() + "-";
    }
    returnIntent.putExtra("sourceList",result);

    getActivity().setResult(Activity.RESULT_OK,returnIntent);
    getActivity().finish()
    super.onDestroy();
}

希望这会有所帮助

答案 1 :(得分:0)

我发现了这个问题。问题是putExtra被称为 BEFORE 被调用的setResult函数。在查看库代码之后,setResult函数被称为奇数的地方。使用goToSlide函数代替onStop函数,它是setResult函数最接近的可覆盖函数。创建的重写goToSlide函数而不是onStop函数是:

@Override
public boolean goToSlide(int position){

    if(position >= 3) {

        List<Topic> list = sourceChooseFragment.getAdded();

        Intent intent = new Intent();
        String result = "";
        for (int i = 0; i < list.size(); i++) {
            result += list.get(i).getName() + "-";
        }
        intent.putExtra("sourceList", result);

        setResult(RESULT_OK, intent);
        finish();

    }
    return super.goToSlide(position);

}

TL; DR:主要问题是putExtra函数在setResult函数之前调用。你只需要在调用setResult之前调用putExtra。