簡體   English   中英

Android:ListView僅顯示所選項目嗎?

[英]Android: have ListView only show selected item?

我正在嘗試查找是否有一種方法可以讓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_selector資源(\\ res \\ drawable \\ list_selector.xml):

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item
    android:state_activated="true"
    android:drawable="@drawable/selected" />

<item
    android:state_selected="true"
    android:drawable="@drawable/selected" />

<item
    android:state_focused="true"
    android:drawable="@drawable/selected" /> <!--  @drawable/tab_focus -->

<!-- Pressed -->
<item
    android:state_pressed="true"
    android:drawable="@drawable/pressed" /> <!--  @drawable/tab_press -->

</selector>

按下或選擇的資源看起來像(\\ res \\ drawable \\ pressed.xml):

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/DarkGray"/>
</shape>

而我的setOnItemClickListener用於ListView:

     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();


        }
    });

您可以將單獨的變量“ SomeItem”緩存在單獨的變量中。

然后在適配器的getCount()和getItem(...)中,檢查是否該變量為null,然后僅顯示該項目(如果為null,則顯示正常項目)

@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); 
}

您需要做的是更改適配器,使其包含要包含的新數據(以編程方式刪除不需要的那些項)。

完成后,您需要再次繪制完整列表(將新適配器添加到列表中)。

可能您已在列表視圖中包含一個“ onClick”答案來對此事件做出反應,我建議您在活動中創建一個方法以執行新適配器的添加,並在onClick方法(使用主機)中調用該方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM