我有一个主要活动,其回收视图包含图像视图中的图像。单击图像时,将启动详细活动。
我需要将2个对象传递给intent并在详细活动中检索它们,但由于某种原因我不能这样做。当我使用调试器时,我可以看到两个对象都保存在intent extras中。
然而,当我在另一边取得它们时,我找不到额外的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 :(得分:2)
查看Android Intent文档here。
具体来说,使用Intent#putStringArrayListExtra时的The name must include a package prefix, ...
。
尝试这样的事情:
intent.putStringArrayListExtra(PACKAGE_NAME + ".TRAILERS", (ArrayList)movie.getTrailerList());
其中PACKAGE_NAME等于您的应用程序的程序包名称。
答案 1 :(得分: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();
}
如果Toast显示,则表示您的数据未正确传递。