2014-11-05 37 views
1

如何檢測第二次點擊listview項目的時間?檢測第二次點擊.setOnItemClickListener()

我已經這樣做了,當點擊列表視圖中的項目時,顏色設置爲綠色。現在我想要的是在第二次點擊後改變顏色。

任何人都可以解釋我可以這樣做嗎?

繼承人在那裏我設置顏色爲綠色:

 listView.setOnItemClickListener(new OnItemClickListener(){ 
     @Override 
     public void onItemClick(AdapterView<?> parent, View v, int position, long id){ 

      parent.getChildAt(position).setBackgroundColor(Color.GREEN); 

     } 
    }); 
+0

當項目點擊基於設置的其他背景顏色時,檢查背景顏色。 – 2014-11-05 08:54:01

+0

這只是一個建議,取決於你最終想做什麼,但是你可以做一些類型的計數器,然後在inItemCLick中,只是看看有多少點擊已經完成,並且改變了顏色的功能。可能會有些比這更好的方式,但同時你可以向前移動 – Shudy 2014-11-05 08:55:19

回答

1

只需在您的Listener中添加一個屬性變量即可。像這樣:

listView.setOnItemClickListener(new OnItemClickListener(){ 
    private Set<Integer> hasClickedSet = new HashSet<Integer>(); 
    @Override 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id){ 
     if (hasClickedSet.contains(position)){ 
      v.setBackgroundColor(Color.BLACK); 
     } else { 
      v.setBackgroundColor(Color.GREEN); 
      hasClickedSet.add(position); 
     } 
} 

而且您不需要調用parent.getChildAt(position)。只需使用'v'參數即可。

========編輯============ 沒關係,試試這個:

listView.setOnItemClickListener(new OnItemClickListener(){ 
     private SparseArray<Boolean> hasClicked = new SparseArray<Boolean>(); 
     @Override 
     public void onItemClick(AdapterView<?> parent, View v, int position, long id){ 
      if (hasClicked.get(position, false)){ 
       v.setBackgroundColor(Color.RED); 
       hasClicked.put(position, false); 
      } else { 
       v.setBackgroundColor(Color.GREEN); 
       hasClicked.put(position, true); 
      } 
    } 
+0

這隻能運行一次 – 2014-11-05 09:12:12

+0

編輯後嘗試我的新代碼。 – WoookLiu 2014-11-05 09:27:16

+0

工作。非常感謝 – 2014-11-05 09:43:53

2

嘗試這種方式

Boolean flag=false; 

    listView.setOnItemClickListener(new OnItemClickListener(){ 
     @Override 
     public void onItemClick(AdapterView<?> parent, View v, int position, long id){ 

      if(flag==false){ 
      parent.getChildAt(position).setBackgroundColor(Color.GREEN); 
      flag=true; 
      } 
      else{ 
      parent.getChildAt(position).setBackgroundColor(Color.RED); 
      flag=false; 
      } 

     } 
    }); 
+0

非常好!我正在尋求的解決方案的類型。謝謝! – 2014-11-05 08:59:39

+0

除了我必須點擊兩次。那是怎麼回事? – 2014-11-05 09:04:36

+0

你應該有不止一個國旗。使用SparseArray存儲每個項目視圖的標誌。 – WoookLiu 2014-11-05 09:06:33

0

您可以跟蹤點擊

 int count = 0; // define globally 
    view.clickListener(){ 
     count++; 
     if (count==1) 
      { 
       // first click 
      } 
     else{ 
       // not first click 
       } 
    } 
0

的n個試試這個辦法,希望這將幫助你解決你的問題。

採取的HashMap持有的所有位置和布爾的就是點擊與否:

HashMap<Integer,Boolean> clickMap = new HashMap<Integer, Boolean>(); 

檢查HashMap中包含這個位置意味着這個位置的項目點擊在HashMap中的變化的背景基地以及布爾值:

if(clickMap.containsKey(position) && clickMap.get(position)){ 
    parent.getChildAt(position).setBackgroundColor(Color.orignal); 
    clickMap.put(position,false); 
}else{ 
    clickMap.put(position,true); 
    parent.getChildAt(position).setBackgroundColor(Color.GREEN); 
} 
5

如果你正試圖從你的電池它不修改任何會爲第二次點擊工作。 爲此,請嘗試使適配器內部的偵聽器,然後更改背景的顏色(convertView.setBackground(*))。對我來說,它的工作如下圖所示:

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    convertView.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     if (viewHolder.addedButton.getVisibility() == View.INVISIBLE) { 
     viewHolder.addedButton.setVisibility(View.VISIBLE); 
     convertView.setBackground(any_color_you_want); 
     listener.onButtonAdd(v, position); 
     } else { 
     viewHolder.addedButton.setVisibility(View.INVISIBLE); 
     convertView.setBackground(any_color_you_want); 
     listener.onButtonRemove(v, position); 
     } 
    } 
    }); 

} 

在這個例子中,我試圖做一個可檢查的列表。