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 и т. Д.

  • Android Studio - отладочное хранилище
  • Android-Как показать выбор текста в текстовом режиме?
  • Как начать работу из fragmentа?
  • Как убить стороннее приложение?
  • Как использовать AutoCompleteTextView и заполнять его данными из веб-API?
  • TimerTask vs Thread.sleep vs Handler postDelayed - наиболее точная функция вызова каждые N миллисекундов?
  • Использование onBackPressed () в Android-fragmentах
  • Захват экрана GLSurfaceView для растрового изображения
  • Что такое хорошая библиотека для анализа математических выражений в java?
  • Есть ли ограничения в пакете android?
  • Android NDK: ссылка с использованием предварительно скомпилированной статической библиотеки
  • Interesting Posts

    Альтернативы AutoHotKey работают с Synergy?

    Как вызвать пользователя для запуска как учетные данные при двойном щелчке значка?

    Непризнанное сообщение SSL, соединение с открытым текстом? исключение

    Когда вы должны использовать class vs struct в C ++?

    Что такое манифест в Скала и когда он вам нужен?

    вызов деструктора явно

    Измените начальное меню Windows 8 на Windows 7

    ПК с Windows 10 не спали после автоматического пробуждения (иногда)

    Устраняет ли тепло компьютеры при отключении?

    Как отправлять и извлекать параметры с помощью $ state.go toParams и $ stateParams?

    Добавить каталог в $ PATH, если он еще не существует

    Каков канонический способ проверки ошибок с использованием API-интерфейса CUDA?

    Способ преобразования canvasа HTML5 в SVG?

    Как масштабировать streamовое bitmap на месте, не читая сначала все изображение?

    d3.js v4: Как получить доступ к исходному индексу родительской группы?

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