使用嵌套的setOnItemClickListener时,ListView会丢失当前选择

时间:2012-04-10 11:05:38

标签: android listview

Android大师! 我希望你能帮助我。我有一个包含两个ListView的活动布局。逻辑是当有人在菜单ListView中选择一个项目时,第二个ListView中充满了一些可点击的项目。我使用嵌套的setOnItemClickListener创建了它。顶部侦听器绑定到菜单ListView项。嵌套侦听器在填充后绑定到第二个ListView。 当我不做嵌套时,一切都好。菜单ListView显示当前所选项目。如果我做筑巢。除了一件事以外,一切正常。我的菜单ListView丢失了当前项目选择标记。怎么了?我需要菜单ListView中的当前选择。代码如下。

menu.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> arg0,
  android.view.View arg1, int arg2, long arg3) {
    mainList = (ListView) findViewById(R.id.listView2);
    aaMainList = new cArrayAdapter(this, R.layout.mainlistitem, ALfiles);
    mainList.setAdapter(aaMainList);
    mainList.setOnItemClickListener(new AdapterView.OnItemClickListener(){          
      @Override
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        lounchFileInDefaultVewer("file:/"+ ALfiles.get(arg2).getAbsolutePath());
        Log.d("ssapp", items[arg2].getAbsolutePath());
      }
    });
  }
});

2 个答案:

答案 0 :(得分:0)

如果您希望其他列表仅在选中“菜单”列表中的元素后才可见,则只需在默认情况下使用可见性GONE进行设置,在第一个OnItemClickListener之外执行所有操作:

    final ListView mainList = (ListView) findViewById(R.id.listView2);
    aaMainList = new cArrayAdapter(this, R.layout.mainlistitem, ALfiles);
    mainList.setAdapter(aaMainList);
    mainList.setOnItemClickListener(new AdapterView.OnItemClickListener(){          
      @Override
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        lounchFileInDefaultVewer("file:/"+ ALfiles.get(arg2).getAbsolutePath());
        Log.d("ssapp", items[arg2].getAbsolutePath());
      }
    });

并且只在第一个OnItemClickListener中将其设置为vsibible:

menu.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> arg0,
  android.view.View arg1, int arg2, long arg3) {
    mainList.setVisibility(View.VISIBLE);
  }
});

您也可以在上面的监听器中更改适配器内容。

答案 1 :(得分:0)

可能是您的第一个列表不再具有焦点,因此所选项目不再位于第一个列表中。您是否已查看使用支持库并将两个列表实现为两个片段。这样,两个列表上的操作彼此独立,但您仍然可以在第一个列表中设置第二个列表中的值,您的第一个列表也将保留所选项目。

http://developer.android.com/sdk/compatibility-library.html