【发布时间】:2017-08-29 01:33:20
【问题描述】:
从调试中我可以看到,当调用startActivity(Intent) 时,附加功能实际上是在意图中。但是,一旦在新活动中调用getIntent(),附加功能就消失了。在我添加 AsyncTask 来处理长计算之前,意图的附加功能很好。
下面是启动新活动RecipeListActivity的代码
public class Fragment extends android.support.v4.app.Fragment {
private Entity mEntity;
private class RecipeOperation extends AsyncTask<Void, Void, ArrayList<Recipe>> {
Context mContext;
public RecipeOperation(Context context){
mContext = context;
}
@Override
protected void onPreExecute(){
// set gui visibilities
}
@Override
protected ArrayList<Recipe> doInBackground(Void... param) {
// long computation
}
@Override
protected void onPostExecute(ArrayList<Recipe> result) {
//start activity
Intent i = RecipeListActivity.newIntent(mContext, mEntity.getName(), result);
mContext.startActivity(i);
}
}
}RecipeOperation 任务是这样执行的
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new RecipeOperation(getActivity()).execute();
}
});
下面是我开始的活动
public class RecipeListActivity extends SingleFragmentActivity {
private static final String EXTRA_NAME = "name";
private static final String RECIPES_TAG = "Recipes";
@Override
protected Fragment createFragment(){
String Name = getIntent().getExtras().getString(EXTRA_NAME);
ArrayList<Recipe> recipes = getIntent().getExtras().getParcelableArrayList(RECIPES_TAG);
return RecipeListFragment.newInstance(Name,recipes);
}
public static Intent newIntent(Context packageContent, String Name, ArrayList<Recipe> recipes){
Intent intent = new Intent(packageContent,RecipeListActivity.class);
intent.putExtra(EXTRA_NAME, Name);
intent.putParcelableArrayListExtra(RECIPES_TAG,recipes);
return intent;
}
}
这是RecipeListActivity的超类
public abstract class SingleFragmentActivity extends AppCompatActivity {
protected abstract Fragment createFragment();
@LayoutRes
protected int getLayoutResId(){
return R.layout.activity_masterdetail;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutResId());
FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.fragment_container);
if (fragment == null) {
fragment = createFragment();
fm.beginTransaction()
.add(R.id.fragment_container, fragment)
.commit();
}
}
}
在开始新活动时,意图的附加内容发生了什么变化?如何让附加内容持续存在?
【问题讨论】:
-
onCreate()属于超类SingleFragmentActivity -
你在里面设置断点了吗?
-
我在问题中添加了
SingleFragmentActivity。我在该类中设置了一个断点,并且那里的附加项也为空。 -
也许您的 Fragment 正在以某种方式重新创建该 Activity。所以,你可以尝试在片段中添加
setRetainInstance(true)