簡體   English   中英

單擊后如何禁用ListView項?

[英]How to disable ListView item after it has been clicked?

我有一個簡單的Strings數組,我在一個帶有ArrayAdapter的水平ListView顯示。 我要做的是:當用戶從ListView選擇一個項目時,使該項目不可點擊並更改該項目的背景顏色。 也許就像一個“灰暗”的外觀。 我正在研究創建一個自定義Adapter並覆蓋isEnabled(int position)方法,但我不知道如何去做。 任何建議,建議或幫助將不勝感激!

我正在研究創建一個自定義適配器並覆蓋isEnabled(int position)方法,但我不知道如何去做。

這很容易做到。 我建議使用SparseBooleanArray來跟蹤啟用的項目以提高效率:

public class MyAdapter extends ArrayAdapter<String> {
    private SparseBooleanArray enabledItems = new SparseBooleanArray(); 

    public MyAdapter(Context context, int textViewResourceId, List<String> objects) {
        super(context, textViewResourceId, objects);
    }

    @Override
    public boolean areAllItemsEnabled() {
        return false;
    }

    @Override
    public boolean isEnabled(int position) {
        return enabledItems.get(position, true);
    }

    public void toggleItem(int position) {
        boolean state = enabledItems.get(position, true);
        enabledItems.put(position, !state);
    }
}

Eclipse的AutoComplete功能必須完成,但這里有一些快速說明:

  • 您必須覆蓋areAllItemsEnabled()以及isEnabled()
  • 我設計的toggle()onItemClickListener()你只需要調用adapter.toggle(position)
  • 如果要更改行的外觀(默認情況下更多是啟用和禁用),只需覆蓋getView() 不要忘記涵蓋兩種情況:

     public View getView(int position, View convertView, ViewGroup parent) { convertView = super.getView(position, convertView, parent); if(!isEnabled(position)) { /* change to disabled appearance */ } else { /* restore default appearance */ } return convertView; } 

    希望有所幫助!

單擊列表項時將位置傳遞給適配器類

 @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id)
    {
        adapter.setSelectedIndex(position);
    }

將setSelectedIndex的方法添加到適配器類

  public void setSelectedIndex(int ind)
    {
        selectedIndex = ind;
        notifyDataSetChanged();
    }

現在檢查此列表視圖的位置是否相同,然后在getView me方法中啟用和禁用值

 if(selectedIndex!= -1 && position == selectedIndex)
        {
            holder.tv.setBackgroundColor(Color.BLACK);
        }
        else
        {
            holder.tv.setBackgroundColor(selectedColor);
        }
        holder.tv.setText("" + (position + 1) + " " + testList.get(position).getTestText());

從這里參考

使用setEnabled(bool)屬性:

yourlistview.setEnabled(false);

不確定它是否會起作用

    public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
                // your code
                view.setBackgroundColor(Color.BLUE);
                view.setEnabled(false);
    }

暫無
暫無

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

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