2012-03-21 5 views
0

Я получил сложную проблему, связанную с ListView и некоторые Intents на Android:прокрутки ListView на Намерение

У меня есть ListActivity, который содержит много элементов. Из другого действия, позвольте ему позвонить CallingActivity, я хочу запустить этот ListActivity и перейти к определенному элементу. В ListActivity можно запустить несколько других Activites, позвоните по телефонам AnotherActivity.

Моей текущей реализацией является сохранение элемента, к которому ListActivity следует спланировать в намерении, а затем использовать следующий код в методе onStart().

if (getIntent().getExtras() != null && getIntent().getExtras().containsKey(EXTRA_EVENTNR)) { 
     int p = getIntent().getExtras().getInt(EXTRA_EVENTNR); 
     getListView().clearFocus(); 
     getListView().post(new Runnable() { 
      @Override 
      public void run() { 
       getListView().setSelection(p); 
      } 
     }); 
    } 

Это решение имеет огромный недостаток:

Пусть следующий вызов в последовательность:

  1. CallingActivity запускает ListActivity Умышленное [EVENTNR=123]
  2. ListActivity recieves намерение и свитки в правильном положении ,
  3. Пользователь продолжает читать и прокручивается дальше.
  4. AnotherActivity запускается из ListActivity
  5. Пользователь нажимает на кнопку Back-
  6. Старое умысел (от 1.) по-прежнему присутствует и получает передается снова в onStart в ListActivity.
  7. ListActivity прокручивается той же позиции снова (как и в 2.)
  8. Scrolling Пользователя из 3. утрачивается

Я думаю, что Намерение неправильное решение для переноса scroll- Информация. Намерения - это больше для содержания деятельности, а не для ее отображения.

Есть ли еще одно решение для передачи информации прокрутки, которая применяется только один раз? Я что-то пропустил?

+0

Возможно использование BroadcastReceivers: http://stackoverflow.com/questions/2282435/inform-activity-from-a-broadcastreceiver-only-if-it-is-in-the-foreground – Moss

ответ

1

Что делать, если вы делаете getIntent().removeExtra(), чтобы удалить дополнительные данные?

С другой стороны, это может быть то, что помещение информации в Intent является неосуществимым осложнением, поскольку для этого вам действительно не нужен намерение. Может ли это простой Java-объект для хранения этой информации с API для установки и сброса?

+0

Спасибо за ' убратьExtra' подсказка. В любом случае, не могли бы вы объяснить, что вы подразумеваете под «API для установки и перезагрузки»? Как я могу отправить значение для прокрутки от «CallingActivity» до «ListActivity»? – theomega

+0

О, я просто подумал, что вызывает проблемы - это намерение, потому что оно всегда есть. Поэтому я просто хотел создать простой Java-класс, например ScrollInfo, с помощью методов set (int pos) и clear() и передать это вместо Intent. То же, что removeExtra(), хотя ... –

Смежные вопросы