2016-05-13 52 views
0

我有一個主要活動與一個recyclerview包含圖像內的圖像。當你點擊圖片時,一個細節活動就會啓動。無法檢索意圖額外

我需要將2個對象傳遞給一個intent並在詳細活動中檢索它們,但出於某種原因我無法做到這一點。當我使用調試器時,我可以看到兩個對象都保存在意圖的附加組件中。

但是,當我在另一邊拿他們時,我找不到我的數組列表。

你能幫我弄清楚爲什麼嗎?

這是我的代碼:

holder.mImageView.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     if (mActivity.isTwoPaneMode()) { 
      Bundle arguments = new Bundle(); 
      arguments.putParcelable(MovieListActivity.MOVIE,movie); 
      arguments.putStringArrayList("TRAILERS", (ArrayList)movie.getTrailerList()); 
      MovieDetailFragment fragment = new MovieDetailFragment(); 
      fragment.setArguments(arguments); 
      mActivity.getSupportFragmentManager().beginTransaction() 
        .replace(R.id.movie_detail_container, fragment) 
        .commit(); 
     } else { 
      Context context = v.getContext(); 
      Intent intent = new Intent(context, MovieDetailActivity.class); 
      intent.putExtra(MovieListActivity.MOVIE, movie); 
      intent.putStringArrayListExtra("TRAILERS", (ArrayList)movie.getTrailerList()); 

      context.startActivity(intent); 
     } 
    } 
}); 

在其他活動:

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

     setContentView(R.layout.activity_movie_detail); 

     if (savedInstanceState == null) { 

      Intent intent = getIntent(); 
      ArrayList<String> trailers = intent.getStringArrayListExtra("TRAILERS"); 
      Movie movie = intent.getParcelableExtra(MovieListActivity.MOVIE); 
      Bundle arguments = new Bundle(); 

      arguments.putParcelable(MovieListActivity.MOVIE, movie); 

      arguments.putStringArrayList(MovieListActivity.MOVIE, 
        getIntent().getStringArrayListExtra("TRAILERS")); 

      MovieDetailFragment fragment = new MovieDetailFragment(); 
      fragment.setArguments(arguments); 

      getSupportFragmentManager().beginTransaction() 
        .add(R.id.movie_detail_container, fragment) 
        .commit(); 

     } 
    } 

我的電影類實現parcelable正確。

+0

你確定你的活動,而不是你的片段?如果您在活動內部進行調試,它是否正確地獲取項目? –

+0

我正在調試的地方,我把值(回調在我的movieAdapter類)和詳細的活動。我沒有在片段上調試它 –

+0

呼叫方有意圖嗎?可能是'movie.getTrailerList()'返回空或空對象? –

回答

2

查看Android Intent文檔here

具體來說,The name must include a package prefix, ...當使用Intent#putStringArrayListExtra。

嘗試這樣:

intent.putStringArrayListExtra(PACKAGE_NAME + ".TRAILERS", (ArrayList)movie.getTrailerList()); 

其中package_name等於你的應用程序包名稱。

+0

工作完美,非常感謝 –

1

嘗試從Bundle而不是和Intent獲取數據。通過這種方式,您可以知道數據是否實際傳遞給活動,因爲如果沒有傳遞,Bundle將是null。還要將數據包名稱添加到數據字符串中。

PACKAGE_NAME = getApplicationContext().getPackageName();

arguments.putStringArrayList(PACKAGE_NAME+"TRAILERS,(ArrayList)movie.getTrailerList()); 而不是做:
Intent intent = getIntent(); ArrayList<String> trailers = intent.getStringArrayListExtra(PACKAGE_NAME+"TRAILERS");

做: Bundle extras = getIntent().getExtras(); ArrayList<String> trailers; if(extras!=null){ ArrayList<String> trailers = extras.getStringArrayList("TRAILERS"); }else{ Toast.makeToast(this, "No data was passed", Toast.LENGTH_LONG).show(); }

如果吐司顯示出來就意味着你的數據沒有被正確地傳遞。