2016-06-10 60 views
3

我有一個列表視圖填充了來自遠程數據庫的數據。當用戶點擊某個項目時,它們將被帶到詳細信息屏幕。我的問題是,如何在用戶點擊列表項時顯示廣告,而不是每次點擊列表項時顯示廣告。我不想在每次點擊5次左右之後顯示廣告,並且每次點擊列表項都會點擊一次。我會怎麼做呢?我假設列表視圖onItemClickListener中的某種邏輯。我只是不知道這個邏輯是什麼樣子。如何在用戶點擊listview項目後顯示廣告,但不是Android中的每個項目?

編輯

每user8的回答,我添加了一個計數器和共享首選項的onItemClickListener。當我點擊一個項目時沒有任何反應。甚至沒有看到DetailActivity。這裏是我的代碼:

list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       //Get item at position 
       RowData item = (RowData)parent.getItemAtPosition(position); 

       final Intent intent = new Intent(MainActivity.this, DetailActivity.class); 

       mInterstitialAd.setAdListener(new AdListener() { 
        @Override 
        public void onAdClosed() { 
         requestNewInterstitial(); 
         startActivity(intent); 
        } 
       }); 

       SharedPreferences prefs = getPreferences(MODE_PRIVATE); 


       int clickCount = prefs.getInt(KEY_CLICK_COUNT, 1); 
       if (clickCount % 5 == 0) { 
        if (mInterstitialAd.isLoaded()) { 
         mInterstitialAd.show(); 
        } else { 
         startActivity(intent); 
        } 
       } 
       clickCount++; 
       prefs.edit().putInt(KEY_CLICK_COUNT, clickCount).apply(); 

       //Start details activity 
       //startActivity(intent); 
      } 
     }); 

EDIT 2

確定。我看到出了什麼問題。根據用戶8的回答,當用戶點擊5次時,如果用戶點擊次數少於5次,則不顯示任何內容。所以我添加了一個else語句,現在用戶可以單擊列表項並轉到詳細活動。每5次點擊後廣告仍會展示,但廣告之間不會「陳舊」。這裏的工作代碼:

list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       //Get item at position 
       RowData item = (RowData)parent.getItemAtPosition(position); 

       final Intent intent = new Intent(MainActivity.this, DetailActivity.class); 

       mInterstitialAd.setAdListener(new AdListener() { 
        @Override 
        public void onAdClosed() { 
         requestNewInterstitial(); 
         startActivity(intent); 
        } 
       }); 

       SharedPreferences prefs = getPreferences(MODE_PRIVATE); 


       int clickCount = prefs.getInt(KEY_CLICK_COUNT, 1); 
       if (clickCount % 5 == 0) { 
        if (mInterstitialAd.isLoaded()) { 
         mInterstitialAd.show(); 
        } else { 
         startActivity(intent); 
        } 
       }else{ 
       startActivity(intent); 
       } 
       clickCount++; 
       prefs.edit().putInt(KEY_CLICK_COUNT, clickCount).apply(); 

       //Start details activity 
       //startActivity(intent); 
      } 
     }); 
+0

你有任何反對使用靜態計數器變量? –

回答

1

你可以做你的ListViewOnItemClickListener是這樣的:

SharedPreferences prefs = getPreferences(MODE_PRIVATE); 

int clickCount = prefs.getInt(KEY_CLICK_COUNT, 0); 
if (clickCount > 0 && clickCount % 5 == 0) { 
    showAd(); 
} 
clickCount++; 
prefs.edit().putInt(KEY_CLICK_COUNT, clickCount).apply(); 
1

有很多方法可以做到這一點,它只取決於什麼是最容易的。

1)丹尼爾·K的他的評論,一個計數器變量所提到的,保持在類中,可以只在每次點擊註冊

2時),您可以通過使用保持一個稍微更持久的變量遞增shared preferences(應用程序被關閉後,這將持續)

3)如果你有一個MyApplication的類,你可以使用靜態變量有太多這將提供相同的功能選項1.

4)你可以使用一個數據庫(儘管說實話這可能太多了)。

我個人會建議共享首選項,因爲即使在用戶關閉並重新打開應用程序後,它也會跟蹤點擊次數,這樣,如果用戶單擊4次,關閉應用程序並返回到另一天再次點擊4次(一次又一次),每5次點擊仍會得到一個結果,而不是等待他們在單個會話中單擊5次。

-PGMac

+1

我沒有考慮過堅持,很好的建議。 –

+0

有趣。好的一點。我要去嘗試Shared Prefs方法,看看這個方法如何。我確實有一個應用程序類,如果需要的話我可以使用它。 –

+1

謝謝!祝你好運!如果你真的想要神祕,你可以在彈出式廣告出現之前保留一個單獨的持續的點擊次數,並動態地改變它(如每5,然後10,然後5)等等。萬一你不想要用戶看到一個模式。 – Silmarilos

相關問題