2013-10-22 32 views
0

我在代碼中實現了多個點擊監聽器。但是,我希望每次單擊來自單獨圖像的點擊都會保存在共享偏好設置中的「股票代碼」中。因此,如果在圖像1上點擊2次,在圖像2上點擊4次,在圖像3上點擊6次,則共計首選項中共計12點「點擊」。問題是,每個onClickListener似乎都會覆蓋另一個,而不是堆疊。任何想法如何實現這一目標?使用多個onclicklistener添加到SharedPreference值

Image1.setOnClickListener(new View.OnClickListener() { 
SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE); 
int numClicks = pref.getInt("Total_Clicks", 0); 

@Override 
public void onClick (View v) { 
      numClicks++; 
     } 

     SharedPreferences pref = 
          getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE); 
     Editor ed = pref.edit(); 
     ed.putInt("Total_Clicks", numClicks); 
     ed.apply(); 
} 
}); 

Image2.setOnClickListener(new View.OnClickListener() { 
SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE); 
int numClicks = pref.getInt("Total_Clicks", 0); 

@Override 
public void onClick (View w) { 
      numClicks++; 
     } 

     SharedPreferences pref = 
          getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE); 
     Editor ed = pref.edit(); 
     ed.putInt("Total_Clicks", numClicks); 
     ed.apply(); 
} 
}); 

Image3.setOnClickListener(new View.OnClickListener() { 
SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE); 
int numClicks = pref.getInt("Total_Clicks", 0); 

@Override 
public void onClick (View x) { 
      numClicks++; 
     } 

     SharedPreferences pref = 
          getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE); 
     Editor ed = pref.edit(); 
     ed.putInt("Total_Clicks", numClicks); 
     ed.apply(); 
} 
}); 

回答

1

您正在跟蹤的numclicks 3次(每次OnClickListener內),所以它是有道理的,他們互相覆蓋。

對於初學者,您只能創建一次OnClickListener,並將其分配給每個圖像。這應該解決這個問題:

View.OnClickListener imageClickedListener = new View.OnClickListener() { 
     SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE); 
     int numClicks = pref.getInt("Total_Clicks", 0); 

     @Override 
     public void onClick (View v) { 
      numClicks++; 

      Editor ed = pref.edit(); 
      ed.putInt("Total_Clicks", numClicks); 
      ed.apply(); 
     } 


} 

Image1.setOnClickListener(imageClickedListener); 
Image2.setOnClickListener(imageClickedListener); 
Image3.setOnClickListener(imageClickedListener); 

編輯:

,因爲我覺得它更清楚我在這裏已經添加到您的評論的答覆。

sharedPreferences實例不是問題。他們都與同一個保存的數據交談(「ActivityPREF」)。問題是你有3個OnClickListener實例,並且他們全部3個都持有整數numClicks。所以他們都從0開始(或以前保存的金額),並且只增加了本地的數字點擊。因此,如果我點擊了兩次image1,那麼這個監聽器中的numClicks將會打開2.其他的仍然會在0.

如果您在添加onClick方法之前添加了以下內容, numClicks:

numClicks = pref.getInt("Total_Clicks", 0); 

因爲它會從保存的值重新加載它。每次點擊時,只會調用onClick方法內的代碼,而不是在實例化OnClickListener時添加的代碼。

+1

你的答案解決了我的問題。但是,我還有一個問題,因爲我還在學習。爲什麼之前寫的方式不工作?是不是基本上是一樣的事情,但更長的時間,因爲sharedPreferences的每個實例都在一個單獨的操作中調用? –

+0

爲了更加清晰,我添加了對答案的回覆。我現在要睡覺了,我意識到我不是最擅長解釋的,但如果您有更多關於此主題的問題,請隨時詢問,我會盡量在早上回復。 – Lauw

+0

因此,如果我已經移動「int numClicks = pref.getInt(」Total_Clicks「,0);」從.setOnClickListener到OnClick(){}它會以同樣的方式工作? –