Как заполнить ListView из другого класса? - PullRequest
0 голосов
/ 01 февраля 2012

Моя проблема заключается в следующем (я знаю, что выбранная структура моих классов выглядит странно, но ...).

  1. У меня есть MainActivity с внутренним классом, который расширяет AsyncTask для анализа HTML из Интернета.
  2. Это действие анализирует HTML-страницу и заполняет ListView в AnotherActivity.
  3. AnotherActivity должно вызывать внутренний AsyncTask, а PostExecute должен заполнять ListView другими данными (смысл этого действия в том, что AnotherActivity является результатом поиска, а другой поиск означает переход на новую страницу результатов поиска YouTube)
  4. Я написал следующий код в PostExecute AsyncTask: где я получаю Activity с ListView, создаю адаптер и назначаю его ListView.

    ResultsQueryActivity resultsActivity = new ResultsQueryActivity();<br> ResourceDataAdapter resourceDataAdapter = new ResourceDataAdapter(resultsActivity,MainActivity.listVideosData); resultsActivity.setListAdapter(resourceDataAdapter);

После выполнения этого я получаю сообщение

*02-01 07:40:56.784: E/AndroidRuntime(525): java.lang.IllegalStateException: System services not available to Activities before onCreate()*

Я действительно понятия не имею, как ее решить. Спасибо за помощь!

Ответы [ 3 ]

1 голос
/ 01 февраля 2012

Почему у вас есть два вида деятельности, когда кажется, что оба они должны быть выполнены для одного и того же упражнения?

Просто используйте один вид деятельности. Когда синтаксический анализ завершен, обновите ListView с вашими данными, а затем покажите ListView. Первоначально ListView будет скрыт. Ваши другие взгляды (если таковые имеются) также будут скрыты.

Или используйте ListActivity, на самом деле ничего не изменится.

0 голосов
/ 01 февраля 2012

Вы не можете создать экземпляр действия, действия управляются системой.

Поток двух действий не очень хорошо.

  1. Если MainActivity используется только дляразбирать html, тогда его не должно быть.Поместите асинхронную задачу в AnotherActivity и заполните список в postExecute.

  2. Если должна существовать MainActivity, вам не следует заполнять данные в задаче.Попробуйте проанализировать данные в AnotherActivity и позволить им заполнить данные самостоятельно.

0 голосов
/ 01 февраля 2012

Я думаю, это как-то связано с тем, как вы создаете ResultsQueryActivity ... Обычно вы запускаете его через Intent и передаете все свои видеоданные в него, помещая его в Bundle. Попробуйте заменить код в postExecute() на что-то вроде этого (при условии, что ваши видеоданные представляют собой массив String):

Intent intent = new Intent(MainActivity.this, ResultsQueryActivity.class);
intent.putExtra("videodata", MainActivity.listVideosData);
startActivity(intent);

Затем в классе ResultsQueryActivity вы можете получить данные в методе onCreate(Bundle b):

Bundle extras = getIntent().getExtras();
String[] videodata = extras.getStringArray("videodata");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...