Pass ArrayList to Activity

Я искал несколько тем, но не нашел решения моей проблемы.

public class Series implements Parcelable { private String name; private int numOfSeason; private int numOfEpisode; /** Constructors and Getters/Setters have been removed to make reading easier **/ public Series(Parcel in) { String[] data = new String[3]; in.readStringArray(data); this.name = data[0]; this.numOfSeason = Integer.parseInt(data[1]); this.numOfEpisode = Integer.parseInt(data[2]); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeStringArray(new String[] { this.name, String.valueOf(this.numOfSeason), String.valueOf(this.numOfEpisode) }); } private void readFromParcel(Parcel in) { name = in.readString(); numOfSeason = in.readInt(); numOfEpisode = in.readInt(); } public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public Series createFromParcel(Parcel in) { return new Series(in); } @Override public Series[] newArray(int size) { return new Series[size]; } }; 

}

В моей MainActivity у меня есть ArrayList. Чтобы сделать список динамически редактируемым, мне нужно передать его другому действию, где я могу его редактировать.

 ArrayList listOfSeries = new ArrayList(); public void openAddActivity() { Intent intent = new Intent(this, AddActivity.class); intent.putParcelableArrayListExtra( "com.example.episodetracker.listofseries", (ArrayList) listOfSeries); startActivity(intent); } 

Мне нужно отобразить список, иначе Eclipse предоставит мне следующее сообщение об ошибке. Метод putParcelableArrayListExtra (String, ArrayList) в типе Intent не применим для аргументов (String, List)

Это правильный способ сделать это?

  ArrayList list = savedInstanceState .getParcelableArrayList("com.example.episodetracker.listofseries"); 

Именно так я пытаюсь прочитать данные в другой деятельности.

Он падает на линию выше. а именно: getParcelableArrayList.

    • Проблема заключается в том, чтобы написать парцеллу и прочитать ее с посылки …

       @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeInt(numOfSeason); dest.writeInt(numOfEpisode); } private void readFromParcel(Parcel in) { name = in.readString(); numOfSeason = in.readInt(); numOfEpisode = in.readInt(); } 
    • То, что вы выписываете, должно соответствовать тому, что вы читаете …

       @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent i = new Intent(this,SecondActivity.class); ArrayList testing = new ArrayList(); i.putParcelableArrayListExtra("extraextra", testing); startActivity(i); } /**********************************************/ public class SecondActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ArrayList testing = this.getIntent().getParcelableArrayListExtra("extraextra"); } } 
    • Вышеприведенный код имеет onCreate () из двух разных действий. Первый запускает второй; и он отлично работает, я смог вытащить аргумент без проблем.

    Вы должны использовать метод putParcelableArrayListExtra() в classе Intent .

    Я использовал putParcelableArrayList() из объекта Bundle . Не прямо из объекта Intent Object (я не знаю, в чем разница). но я использую так:

     ArrayList resultSet = new ArrayList(); resultSet = loadData(); Bundle data = new Bundle(); data.putParcelableArrayList("search.resultSet", resultSet); yourIntent.putExtra("result.content", data); startActivity(yourIntent); 

    Позже в новом действии вы можете заполнить данные, недавно вставленные в объект Bundle, следующим образом:

     Bundle data = this.getIntent().getBundleExtra("result.content"); ArrayList result = data.getParcelableArrayList("search.resultset"); 

    Просто помните, что ваш ArrayList<> должен содержать только интересные объекты. и просто чтобы убедиться, что вы передали данные, которые вы можете проверить, являются ли полученные данные нулевыми или нет, просто чтобы избежать проблем.

    Может быть, это помогает кому-то. Еще моя проблема заключалась в том, что я использовал write и readValue, но он должен соответствовать типу, например writeInt, readInt writeString, readString и т. Д.

    Давайте будем гением компьютера.