簡體   English   中英

所選項目ListView背景更改

[英]Selected item ListView Background change

我有一個ListView,單擊某個項目后我希望它被永久選中,因此可以根據下一步按下的按鈕來執行其他操作。 有點像RadioBox,但在列表視圖中。 因此,當按下時,背景保持黃色,並且我保留所選項目的存儲。 目前,單擊它時,背景發生了變化,但是在選擇時出現了怪異的行為,並且我滾動了ListView,所選項目發生了變化。

代碼我有:

ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
        for (int i = 0; i < titles.size(); i++){
            HashMap<String, String> map = new HashMap<String, String>();
            map.put("name", titles.get(i));
            mylist.add(map);
        }

        SimpleAdapter mSchedule = new SimpleAdapter(this, mylist, R.layout.listcell,
                new String[] {"name"}, new int[] {R.id.txtItemName}); 

        ListView listView1 = (ListView) findViewById(R.id.ListView01); 
        listView1.setAdapter(mSchedule); 
        listView1.setTextFilterEnabled(true);
        listView1.setOnItemClickListener(new OnItemClickListener() { 
                    @Override
                    public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
                        Log.v("Test", v.toString());
                        v.setBackgroundResource(R.drawable.newbackground);
                    }
                });
}

ListView中的視圖將被回收,因此,如果所選視圖不在屏幕上,則可能會將其重新用於當前的可見項之一。 那可能是您所描述的怪異行為? 如果您想根據項目選擇執行多個潛在操作,通常可以通過長按+顯示上下文菜單來完成。

什么是怪異行為?

跟蹤HashSet的選定項目。 重寫SimpleAdapter.getView()方法,以基於selectedItems HashSet分配背景資源。

    final HashSet<String> selectedItems = new HashSet<String>();
    SimpleAdapter mSchedule = new SimpleAdapter(this, mylist, R.layout.listcell,new String[] {"name"}, new int[] {R.id.txtItemName}) {
        @Override
        public View getView(int position, View v, ViewGroup parent) {
            if(v!= null) {
                String title = titles.get((int)this.getItemId(position));
                if(selectedItems.contains(title)) {
                    v.setBackgroundResource(R.drawable.newbackground);
                } else {
                    v.setBackgroundResource(0);
                }
            }
            return super.getView(position, v, parent);
        }
    };
    ListView listView1 = (ListView)findViewById(R.id.listView1);        
    listView1.setAdapter(mSchedule); 
    listView1.setTextFilterEnabled(true);        
    listView1.setOnItemClickListener(new OnItemClickListener() { 
        @Override
        public void onItemClick(AdapterView<?> a, View v, int position, long id) {      
            String title = titles.get((int)id);
            if(selectedItems.contains(title)) {
                v.setBackgroundResource(0);
                selectedItems.remove(title);

            } else {
                v.setBackgroundResource(R.drawable.newbackground);
                selectedItems.add(title);
            }                
        }

    });        

暫無
暫無

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

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