如何在用户点击listview项目后显示广告,而不是Android中的每个项目?
我有一个列表视图,其中填充了来自远程数据库的数据。当用户单击某个项目时,他们将进入详细信息屏幕。我的问题是,当用户单击列表项而不是每次单击列表项时,我如何显示和广告。我不想在每次点击列表项时都显示广告,就像每点击5次左右一样。我该怎么做呢?我假设listview侦听器中存在某种逻辑。我只是不知道这种逻辑会是什么样子 编辑 根据user8的回答,我已经向侦听器添加了一个计数器和共享pref。但当我点击一个项目时,什么也没有发生。甚至不想看到详细的活动。这是我的密码:如何在用户点击listview项目后显示广告,而不是Android中的每个项目?,android,listview,admob,Android,Listview,Admob,我有一个列表视图,其中填充了来自远程数据库的数据。当用户单击某个项目时,他们将进入详细信息屏幕。我的问题是,当用户单击列表项而不是每次单击列表项时,我如何显示和广告。我不想在每次点击列表项时都显示广告,就像每点击5次左右一样。我该怎么做呢?我假设listview侦听器中存在某种逻辑。我只是不知道这种逻辑会是什么样子 编辑 根据user8的回答,我已经向侦听器添加了一个计数器和共享pref。但当我点击一个项目时,什么也没有发生。甚至不想看到详细的活动。这是我的密码: list.setOnI
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);
}
});
list.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//在位置上获取项目
RowData项=(RowData)父项.getItemAtPosition(position);
最终意图=新意图(MainActivity.this、DetailActivity.class);
minterstitalad.setAdListener(新的AdListener(){
@凌驾
已关闭的()上的公共无效{
请求间质();
星触觉(意向);
}
});
SharedReferences prefs=getPreferences(模式\私有);
int clickCount=prefs.getInt(键单击计数,1);
如果(单击计数%5==0){
if(minterstitalad.isload()){
minterstitalad.show();
}否则{
星触觉(意向);
}
}
点击计数++;
prefs.edit().putin(键单击计数,单击计数).apply();
//启动详细信息活动
//星触觉(意向);
}
});
编辑2
嗯。我知道出了什么问题。根据user8的回答,当用户点击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);
}
});
list.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//在位置上获取项目
RowData项=(RowData)父项.getItemAtPosition(position);
最终意图=新意图(MainActivity.this、DetailActivity.class);
minterstitalad.setAdListener(新的AdListener(){
@凌驾
已关闭的()上的公共无效{
请求间质();
星触觉(意向);
}
});
SharedReferences prefs=getPreferences(模式\私有);
int clickCount=prefs.getInt(键单击计数,1);
如果(单击计数%5==0){
if(minterstitalad.isload()){
minterstitalad.show();
}否则{
星触觉(意向);
}
}否则{
星触觉(意向);
}
点击计数++;
prefs.edit().putin(键单击计数,单击计数).apply();
//启动详细信息活动
//星触觉(意向);
}
});
有很多方法可以做到这一点,这取决于什么对你来说最简单
1) 正如Daniel K在他的评论中提到的,保存在类本身中的计数器变量可以在每次注册单击时递增
2) 您可以通过使用(在应用程序关闭后将持续存在)来保留一个更持久的变量
3) 如果您有一个MyApplication类,您也可以在那里使用静态变量,它将提供与选项1相同的功能
4) 您可以使用数据库(不过老实说,这可能需要做太多的工作)
我个人会推荐共享首选项,因为即使在用户关闭并重新打开应用程序后,它也会跟踪用户的点击,这样,如果用户点击4次,关闭应用程序,然后在另一天再次点击4次(一次又一次),您仍然会每单击5次就得到一个结果,而不是在一次会话中等待他们单击5次
-PGMac您可以在
列表视图的监听器中执行类似操作:
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();
我通过以下更改解决了这个问题。我想在每点击3次后显示它
@Override
public void onClick(View view) {
int position = getAdapterPosition();
final Intent intent=new Intent(getActivity(),VideoPlayActivity.class);
intent.putExtra("data",childlistData.get(position).getData());
SharedPreferences prefs = getActivity().getPreferences(MODE_PRIVATE);
int clickCount = prefs.getInt(KEY_CLICK_COUNT, 1);
if (clickCount % 3 == 0) {
interstitial = new InterstitialAd(getActivity());
interstitial.setAdUnitId(getString(R.string.interstitial_full_screen));
AdRequest adRequest2 = new AdRequest.Builder().build();
interstitial.loadAd(adRequest2);
interstitial.setAdListener(new AdListener() {
public void onAdLoaded() {
interstitial.show();
}
@Override
public void onAdClosed() {
//Toast.makeText(getApplicationContext(), "Ad is closed!", Toast.LENGTH_SHORT).show();
startActivity(intent);
}
@Override
public void onAdFailedToLoad(int errorCode) {
//Toast.makeText(getApplicationContext(), "Ad failed to load! error code: " + errorCode, Toast.LENGTH_SHORT).show();
}
@Override
public void onAdLeftApplication() {
// Toast.makeText(getApplicationContext(), "Ad left application!", Toast.LENGTH_SHORT).show();
}
@Override
public void onAdOpened() {
//Toast.makeText(getApplicationContext(), "Ad is opened!", Toast.LENGTH_SHORT).show();
}
});
System.out.println(" divisible by 3 "+clickCount);
}else{
System.out.println("not divisible by 3 "+clickCount);
startActivity(intent);
}
clickCount++;
System.out.println("Counter Value"+clickCount);
prefs.edit().putInt(KEY_CLICK_COUNT, clickCount).apply();
}
你有没有反对使用静态计数器变量?我没有考虑持久性,大的建议。有趣。说得好。我将尝试共享Prefs方法,看看效果如何。我有一个应用程序类,我可以使用,如果需要的话。谢谢!祝你好运!如果你真的想保持神秘感,你可以在弹出广告出现之前保留一个单独的持续整数,并动态地改变它(比如每5次,然后10次,然后5次),以防万一你不想让用户看到一个模式。