如何将此ArrayList传递给新活动

时间:2016-02-04 02:30:22

标签: java android android-activity arraylist

我正在尝试将此ArrayList传递给另一个活动。 到目前为止,我的努力都失败了。 我知道我不理解如何正确传递它。

这是我的arrayList代码:

public static ArrayList<Movie> getMovieItems() {
        if(mItems == null) {
            mItems = new ArrayList<>();

            Movie movie1 = new Movie();
            movie1.setId(1);
            movie1.setTitle("Title1");
            movie1.setStudio("studio1");
            movie1.setDescription("description1");
            movie1.setCardImageUrl("http://3.bp.blogspot.com/-ZKjKucsPdzI/TudWC99CE_I/AAAAAAAAAD8/qvWdDtw5IW0/s1600/%2528393%2529.jpg");
            //movie1.setVideoUrl("http://corochann.com/wp-content/uploads/2015/07/MVI_0949.mp4");
            /* Google sample app's movie */
            //movie1.setVideoUrl("http://www.youtube.com/embed/VopbGPJVkzM");
            //movie1.setVideoUrl("http://live.gph.gov.sa/makkahlive/");
            //movie1.setVideoUrl("http//livestreaming2.itworkscdn.net/squranlive/squran_7200p");

            /// --- try this

            //String url = "http://www.youtube.com/embed/VopbGPJVkzM";

            //movie1.setVideoUrl("http://commondatastorage.googleapis.com/android-tv/Sample%20videos/Demo%20Slam/Google%20Demo%20Slam_%2020ft%20Search.mp4");
            movie1.setVideoUrl("http//livestreaming2.itworkscdn.net/squranlive/squran_360p");
            mItems.add(movie1);


            Movie movie2 = new Movie();
            movie2.setId(2);
            movie2.setTitle("Title2");
            movie2.setStudio("studio2");
            movie2.setDescription("description2");
            movie2.setCardImageUrl("http://www.questionsonislam.com/sites/default/files/mescid-i-nebevi.jpg");
            //movie2.setVideoUrl("http://corochann.com/wp-content/uploads/2015/07/MVI_0962.mp4");
            /* Google sample app's movie */
            movie2.setVideoUrl("http://www.youtube.com/embed/4OoKpZWJASY");
            mItems.add(movie2);

            Movie movie3 = new Movie();
            movie3.setId(3);
            movie3.setTitle("Title3");
            movie3.setStudio("studio3");
            movie3.setDescription("description3");
            movie3.setCardImageUrl("http://2.bp.blogspot.com/-ju9FXyjDFqI/TgY7uVabgxI/AAAAAAAAADw/-qSdxfyHosM/s1600/masjid+qiblatain+%25283%2529.gif");
            //movie3.setVideoUrl("http://corochann.com/wp-content/uploads/2015/07/MVI_1112.mp4");
            movie3.setVideoUrl("http://www.youtube.com/embed/4OoKpZWJASY");
            mItems.add(movie3);

        }
        return mItems;
    }

mItems是我想传递给另一个活动的ArrayList。 我试过这个“模板”

ArrayList<Movie> chanList= new ArrayList<>();

然后我意识到我没有正确的。

有人可以通过一些洞察力帮助我,并帮助我理解如何正确地做到这一点吗?

谢谢!

ironmantis7x

6 个答案:

答案 0 :(得分:2)

您必须使用if( exists $opt{suppress}{E} )类实现ParcelableSerializable才能通过使用意图的活动传递它。

编辑:您的班级实施sub listopt_to_hash { my($name, $val) = @_; $opt{$name}{$val} = 1; return; } GetOptions( 'verbose' => \$opt{verbose}, 'suppress:s{1,}' => \&listopt_to_hash ); 的一个例子:

Movie

执行此操作后,您可以查看this question,此this tutorialthis one,以获取更多信息。

TL; DR:你必须在发件人活动上使用Intent#putParcelableArrayListExtra,在第二个活动上使用Intent#getParcelableArrayListExtra

答案 1 :(得分:1)

第一步是让你的模型 Parcelable check here for instructions.

接下来是将你的数组列表放在意图中。

Intent intent = new Intent(this, YourNextActivity.class);
intent.putParcelableArrayListExtra("some string identifier", yourArrayList);
startActivity(intent)

然后在下一个活动中,使用以下方法获取数组列表:

 ArrayList<Movie> chanList = getIntent().getParcelableExtra("some string identifier");

答案 2 :(得分:1)

你需要让你的电影类Parcelable。如果您的电影类是POJO,您可以使用http://www.parcelabler.com/

轻松完成

然后你可以直接把它放在意图中并通过它:

Intent intent = new Intent(this, NextActivity.class);
intent.putParcelableArrayListExtra("key_string", movieArrayList);
startActivity(intent);

答案 3 :(得分:0)

您可以使用Sharedprefrence存储列表

  SharedPreferences sharedPreferences =context.getSharedPreferences("MyPrefrence", 0); 

  SharedPreferences.Editor editor = sharedPreferences.edit();

  String movie_data = gson.toJson(mItems);

  editor.putString("MovieDatas", task_data);

  editor.commit()

和访问

  SharedPreferences sharedPreferences = context.getSharedPreferences("MyPrefrence", 0);

  String json=sharedPreferences.getString("MovieDatas","");

  Type type=new TypeToken<ArrayList<Movie>>(){}.getType();

  mItems = new ArrayList<Movie>();

  mItems=New Gson().fromjson(json,type);

答案 4 :(得分:0)

您可以以相同的方式传递ArrayList,

您可以调用Intent的putExtra(String name,Serializable值)来存储,并使用getSerializableExtra(String name)进行检索。

示例:

ArrayList<String> myList = new ArrayList<String>();
intent.putExtra("mylist", myList);

在另一项活动中:

ArrayList<String> myList = (ArrayList<String>)getIntent().getSerializableExtra("mylist");

答案 5 :(得分:0)

对于这个解决方案,我所做的是: 我写了一个类文件来拉取流的youTubeID。 然后我将流的YouTubeID作为我放入ArrayList的变量。现在我可以选择流的yoyTubeID作为变量,现在一切正常!