2013-10-04 48 views
0

由于某种原因,我的onListItemClick(View listView,View view,int position,long id){}在某些条件下不会触发。我的应用程序像这样流动。 ListActivity触发另一个活动,有时用户或其他条件可能导致该活动结果结束。 ListActivity第一次被触发时,意味着onCreate方法被调用,那么onListemClick()总是起作用。第一次用户返回相同的活动时,情况也是如此,然后onListItemClick始终工作。问题出现在用户第二次返回到ListActivity时,那么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

我从来没有发现这一次发生了什么。我想出的解决方案不是使用继承,而是手动实现OnItemClickListener。现在它每次都有效。

0

你的初始化工作在oncreate中,并且还在oncreate()方法中设置适配器。可能是你没有在OnResume()方法中设置监听器。或者你正在设置监听器等于null的恢复方法。

+0

oncreate方法只会调用super.onCreate,实际的类初始化发生在onResume中,因为即使活动被恢复,也不会创建该方法。由于听众是'这个'它真的不能真正为空,我认为,它实际上工作一次后,用户已从其他活动导航回来。我有双重检查,没有值为空。 – Geir

0

在Onresume()方法中重新初始化您的列表或侦听器! 你的解决方案只在onResume()方法..

+0

是的,我也这么认为。问题中的方法都是从onResume方法调用的。 onResume方法总是在onCreateMethod之后调用,这意味着无论活动是创建还是恢复,都会调用这些方法。 arrayAdapter的方便性应该是它为你设置了监听器,而监听器实际上是'this',还是我错了? – Geir

相关问题