出于某种原因,我的 onListItemClick(View listView, View view, int position, long id){} 在某些情况下没有触发。我的申请流程是这样的。ListActivity 触发另一个活动,有时用户或其他条件可能会导致该活动以结果结束。第一次触发 ListActivity 时,意味着调用 onCreate 方法,然后 onListemClick() 始终有效。同样是用户第一次返回同一个activity的情况,那么onListItemClick总是有效的。问题出现在用户第二次返回 ListActivity 时,然后 onListItemClick 根本不会触发,就像根本没有附加到视图的侦听器一样。
我确实仔细检查了是否设置了 listAdapter。它是标准的 ArrayAdapter。所有其他侦听器都是功能性的,所以我怀疑 ListActivity 出于某种原因没有用作侦听器,但我无法理解为什么。这是完全相同的代码,两次运行的值完全相同,但似乎侦听器由于某种原因被空了。代码从调用 setContentView(int id) 之后的行上的 onResume 方法执行。有谁知道为什么会这样?
以下代码启动布局,那里没有问题,一切都按预期进行。
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);
}