用户点击列表视图项后如何显示广告,但Android中的每个项目都没有?

时间:2016-06-10 03:28:33

标签: android listview admob

我有一个listview,其中包含来自远程数据库的数据。当用户点击某个项目时,他们将被带到详细信息屏幕。我的问题是如何在用户点击列表项时显示和广告,但不是每次点击列表项时都显示和广告。我不想显示每个列表项的广告点击,就像每次点击5次左右一样。我该怎么做呢?我在listview onItemClickListener中假设某种逻辑。我只是不知道那个逻辑会是什么样子。

修改

根据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);
            }
        });

编辑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);
            }
        });

3 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点,这取决于你最简单的方法。

1)正如丹尼尔·K在他的评论中所提到的,一个保存在班级本身的计数器变量,每次登记点击时都可以增加

2)您可以使用shared preferences(在应用关闭后会保留)来保持稍微持久的变量

3)如果你有一个MyApplication类,你也可以在那里使用静态变量,它们将提供与选项1相同的功能。

4)你可以使用一个数据库(虽然说实话可能太过分了。)

我个人会推荐共享首选项,因为即使在用户关闭并重新打开应用程序后,它也会跟踪点击次数,这样,如果用户点击4次,关闭应用程序,又返回另一天点击4次(一次又一次),您仍然会每5次点击获得一个结果,而不是等待他们在单个会话中单击5次。

-PGMac

答案 1 :(得分:1)

您可以在ListView OnItemClickListener中执行以下操作:

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();

答案 2 :(得分:0)

我通过以下更改解决了这个问题。我想在每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();
}