2016-05-13 4 views
0

私は、imageviews内のイメージを含むrecyclerviewで主なアクティビティを持っています。イメージをクリックすると、詳細アクティビティが開始されます。インテントエキストラを取得できません

2つのオブジェクトをインテントに渡して詳細アクティビティで取得する必要がありますが、何らかの理由でそれを実行できません。デバッガを使用すると、両方のオブジェクトがインテント・エクストラに保存されていることがわかります。

しかし、私は反対側でそれらを取得すると、私は私のarraylist余分見つけることができません。

理由を理解するのに手伝ってもらえますか?

これは私のコードです:他の活動に

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

私はどこに値(ムービーアダプタクラスのコールバック)と詳細アクティビティを配置するのデバッグです。私はフラグメント上でそれをデバッグしませんでした –

+0

発信側の意図には何かがありますか? 'movie.getTrailerList() 'が空またはnullオブジェクトを返すことがありますか? –

答えて

2

Androidインテントのドキュメントhereをご覧ください。

特に、The name must include a package prefix, ...では、Intent#putStringArrayListExtraを使用しています。 PACKAGE_NAMEは、アプリケーションのパッケージ名に等しい

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

はこのような何かを試してみてください。

+0

完全に働いて、ありがとう –

1

の代わりに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(); }

トーストが現れた場合、それはあなたのデータが正しく渡されていなかったことを意味します。

関連する問題