出于某种原因,我的onListItemClick(查看listView,View视图,int position,long id){}在某些情况下不会触发。我的申请流程如下。 ListActivity触发另一个活动,有时用户或其他条件可能导致该活动以结果结束。第一次触发ListActivity时,意味着调用onCreate方法,然后onListemClick()始终有效。用户第一次返回同一活动的情况也是如此,然后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);
}
答案 0 :(得分:0)
在oncreate中进行初始化工作,并在oncreate()方法中设置适配器。可能是你没有在OnResume()方法中设置监听器。或者你在resume方法上设置listener等于null。
答案 1 :(得分:0)
在Onresume()方法中重新初始化列表或监听器! 您的解决方案仅在于onResume()方法..
答案 2 :(得分:0)
我从来没有发现过这个是怎么回事。我提出的解决方案是不使用继承并手动实现OnItemClickListener。现在它每次都有效。