Android:ListView是否只显示选定的项目?

Android:ListView是否只显示选定的项目?,android,listview,Android,Listview,我试图找出是否有办法让ListView只显示单个选定项目(或我的案例中的激活项目)。我想要的是一个显示选项列表的ListView(不是ExpandableListView)。单击其中一个项目时,该项目将被选中/激活,并且视图将折叠以仅显示单个高亮显示的行。再次单击该项将取消选择/停用,并将导致列表展开,再次显示所有选项 /* Setup the ListView */ List mItems = getItems(someCriteria); ListView lview =

我试图找出是否有办法让ListView只显示单个选定项目(或我的案例中的激活项目)。我想要的是一个显示选项列表的ListView(不是ExpandableListView)。单击其中一个项目时,该项目将被选中/激活,并且视图将折叠以仅显示单个高亮显示的行。再次单击该项将取消选择/停用,并将导致列表展开,再次显示所有选项

/* Setup the ListView */
    List mItems = getItems(someCriteria);

    ListView lview = (ListView)findViewById(R.id.my_listview);
    ArrayAdapter<SomeItem> anAdaptor =
            new ArrayAdapter<SomeItem>(this, android.R.layout.simple_list_item_activated_1, mItems);

    lview.setAdapter(anAdaptor);
    /* Handles the item selection using Activated property */
    lview.setSelector(R.drawable.list_selector);
    lview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
/*设置列表视图*/
List mItems=getItems(someCriteria);
ListView lview=(ListView)findViewById(R.id.my\u ListView);
阵列适配器=
新的ArrayAdapter(这是android.R.layout.simple\u list\u item\u activated\u 1,mItems);
lview.setAdapter(anAdaptor);
/*使用激活的属性处理项目选择*/
lview.setSelector(R.drawable.list_选择器);
lview.setChoiceMode(ListView.CHOICE\u MODE\u SINGLE);
我有一个列表选择器资源(\res\drawable\list\u selector.xml):


按下或选择的资源看起来像(\res\drawable\pressed.xml):


以及ListView的我的setOnItemClickListener:

     lview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapter, View arg1, int position, long id) {

            ListView lview = (ListView) findViewById(R.id.my_listview);

            SomeItem an_item = (SomeItem) adapter.getItemAtPosition(position);

            lview.setSelection(position);
            lview.setItemChecked(position, true);
            lview.invalidateViews();


        }
    });
lview.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共链接(适配器视图适配器,视图arg1,int位置,长id){
ListView lview=(ListView)findViewById(R.id.my\u ListView);
SomeItem an_item=(SomeItem)适配器.getItemAtPosition(position);
lview.选举(职位);
lview.setItemChecked(位置,true);
lview.invalidateViews();
}
});

您需要做的是使用要包含的新数据更改适配器(以编程方式删除那些不需要的项)

完成此操作后,需要再次绘制完整列表(将新适配器添加到列表中)


可能您已经在listview中包含了一个“onClick”答案来响应此事件,我建议您在活动中创建一个方法来执行新适配器,并在onClick方法中(使用主机)添加对该方法的调用。

您可以将所选的“SomeItem”缓存在单独的变量中

然后在适配器的getCount()和getItem(…)中,检查变量是否为null,并仅显示该项(如果为null,则显示正常项)

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/DarkGray"/>
</shape>
     lview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapter, View arg1, int position, long id) {

            ListView lview = (ListView) findViewById(R.id.my_listview);

            SomeItem an_item = (SomeItem) adapter.getItemAtPosition(position);

            lview.setSelection(position);
            lview.setItemChecked(position, true);
            lview.invalidateViews();


        }
    });
@Override
public int getCount()
{
   if(selectedItem != null)
   {
       return 1;
   }

   return super.getCount(); 
}

@Override
public Object getItem(int position)
{
   if(selectedItem != null)
   {
       return selectedItem ;
   }

   return super.getItem(position); 
}