2013-10-04 3 views
0

По какой-то причине мой onListItemClick (View listView, View view, int position, long id) {} ​​не срабатывает при определенных условиях. Мое приложение работает так. ListActivity запускает другое действие, а иногда и пользователи или другие условия могут привести к завершению этой операции с результатом. При первом запуске ListActivity, что означает, что вызывается метод onCreate, всегда работает onListemClick(). То же самое происходит с тем, что пользователи впервые возвращаются к одному и тому же действию, тогда работает onListItemClick. Проблема возникает во второй раз, когда пользователи возвращаются к ListActivity, тогда onListItemClick вообще не запускается, как будто нет прослушивателя, прикрепленного к просмотрам вообще.ListActivity - onListItemClick

Я дважды проверял, что установлен списокAdapter. Это стандартный ArrayAdapter. Все остальные слушатели функциональны, поэтому мои подозрения вращаются вокруг того, что ListActivity по какой-то причине не используется как слушатель, но я не могу понять, почему. Это тот же самый код с одинаковыми значениями, выполняемыми оба раза, но, по-видимому, слушатель по какой-то причине имеет нулевое значение. Код выполняется из метода onResume в строке после вызова setContentView (int id). Кто-нибудь знает, почему это происходит?

Следующий код инициирует компоновку, проблем там нет, все работает по назначению.

private void initLayout(){ 

    projectsToList(user.getProjects()); 

    ttvEmailField = (TextView) findViewById(R.id.ttv_email); 
    ttvNameField = (TextView) findViewById(R.id.ttv_username); 

    String email = user.getEMail(); 
    String name = user.getName(); 

    if(email != null && email.length() > 0){ 
     ttvEmailField.setText(user.getEMail()); 
    } 

    if(name != null && email.length() > 0){ 
     ttvNameField.setText(user.getName()); 
    } 

    btnLogout = (Button) findViewById(R.id.btn_logout); 

    btnLogout.setOnClickListener(this); 

} 

Код ниже устанавливает ArrayAdapter, то onListItem работает только после того, как OnCreate и первый раз, когда пользователь переходит обратно в currentactivity.

private void projectsToList(List<ProjectPojo> projects){ 
    int max = projects.size(); 
    String[] arrProjects = new String[max]; 

    for(int i = 0; i < max; ++i){ 
     arrProjects[i] = projects.get(i).getName(); 
    } 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item_simpletext, R.id.ttv_listtextview, arrProjects); 

    setListAdapter(adapter); 
} 

ответ

0

Я никогда не узнавал, что происходит в этом. Решение, которое я придумал, заключается не в том, чтобы использовать наследование, а вместо этого использовать OnItemClickListener. Теперь он работает каждый раз.

0

Выполняйте свою инициализацию в oncreate, а также устанавливаете адаптер в методе oncreate(). Может быть, yyour не устанавливает прослушиватель в методе OnResume(). Или вы устанавливаете слушатель равным нулю в методе возобновления.

+0

Метод oncreate onlly вызывает super.onCreate, фактическая инициализация класса происходит в onResume, так как этот метод вызывается, даже если активность возобновляется и не создается. Поскольку слушатель является «этим», он не может действительно быть нулевым, я думаю, и он действительно работает один раз после того, как пользователь перешел от другого действия. Я дважды проверил, что значения не равны нулю. – Geir

0

Повторно инициализирован ваш список или слушатель в методе Onresume()! Ваше решение лежит только в методе onResume().

+0

Да, я тоже так думаю. Методы в вопросе вызываются из метода onResume. Метод onResume всегда вызывается после метода onCreateMethod, что означает, что эти методы всегда вызываются, независимо от того, была ли эта деятельность создана или возобновлена. Удобство arrayAdapter должно состоять в том, что он устанавливает для вас слушателя и что слушатель на самом деле «это», или я ошибаюсь? – Geir

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