我在自定义幻灯片片段中有一个带有复选框的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函数替换了它。现在正在调用,但问题仍然存在。
答案 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。