无法检索意图附加内容

时间:2016-05-13 21:53:08

标签: android android-intent

我有一个主要活动,其回收视图包含图像视图中的图像。单击图像时,将启动详细活动。

我需要将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。

2 个答案:

答案 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显示,则表示您的数据未正确传递。