0

出于某种原因,我的 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);
}
4

3 回答 3

0

Do your initialization work in oncreate and also setting adapter in oncreate() method. May be yyour are not setting listener in OnResume() method. Or you are setting listener is equal to null in on resume method.

于 2013-10-04T13:29:02.380 回答
0

Re-initialised your list or listener in Onresume() method! Your solution lies in onResume() method only..

于 2013-10-04T13:32:12.970 回答
0

I never found out what was going on in this one. The solution I came up with was not to use inheritance and implement an OnItemClickListener manually instead. Now it works every time.

于 2013-10-10T07:49:07.140 回答