2017-08-29 15 views
0

從調試中我可以看到,在調用startActivity(Intent)時,附加項實際上是在意圖中。但是,一旦getIntent()在新活動中被調用,額外消失。在添加AsyncTask來處理長時間計算之前,intent的額外功能還不錯。開始新活動後,意向附加項爲空

下面是啓動新的活動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(); 
    } 
} 

}

一旦開始了新的活動發生了什麼事的意圖的演員,我怎麼能得到額外堅持超?

+0

'onCreate()'在超類'SingleFragmentActivity'中 – martin1m

+0

你在那裏設置了一個斷點嗎? –

+0

我在問題中添加了'SingleFragmentActivity'。我在該類中設置了一個斷點,其中的額外元素也是空的。 – martin1m

回答

0

事實證明意圖的附加內容爲空,因爲我的Recipe類中存在錯誤,該類實現Parcelable。實質上,我的parcel.write命令與我的parcel.read命令不匹配。 因此,如果任何人有這個問題檢查你的包裹。將錯誤實現的parcelable放入意圖將在下一個活動開始並調用getIntent時使所有額外項無效。