Как я могу DRY мой код в контексте ниже (android) - PullRequest
0 голосов
/ 18 июня 2020

Я новичок в разработке android и использую общие настройки для показа рекламы после нескольких нажатий кнопок. У меня есть несколько кнопок (как в примере ниже), каждая с разным назначением. Какая будет лучшая реализация для моего единственного logi c ниже, чтобы мой код был DRY (Не повторяйте себя) для всех других кнопок с другим назначением. Мой класс адаптера расширяет RecyclerView

public class ImageAdaptor extends RecyclerView.Adapter<ImageAdaptor.MyViewHolder> {
#####################################
######################################
########################################
    public class MyViewHolder extends RecyclerView.ViewHolder {
        public MyViewHolder(View v) {
            MobileAds.initialize(acontext, "ca-app-pub-3940256099942544~3347511713");
            final InterstitialAd mInterstitialAd = new InterstitialAd(acontext);
            mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
            mInterstitialAd.loadAd(new AdRequest.Builder().build());


           //Here is my working example on first button
           //I want to achieve something like this on other clicks with different intents
           //I don't want to repeat the logic over and over again

            **Button1**.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    final ModelStatus modelStatus = arrayList.get(getAdapterPosition());
                    final Intent intent = new Intent(acontext, Activity1.class);                    
                    mInterstitialAd.setAdListener(new AdListener() {
                        @Override
                        public void onAdClosed() {                            
                            acontext.startActivity(intent);
                        }
                    });
                    SharedPreferences preferences = acontext.getSharedPreferences("PREFRENCE", 
                     Context.MODE_PRIVATE);
                    int clickCount = preferences.getInt("KEY_CLICK_COUNT", 1);

                    if (clickCount % 6 == 0) {
                        if (mInterstitialAd.isLoaded()) {
                            mInterstitialAd.show();
                        } else {
                            acontext.startActivity(intent);
                        };
                    }else {
                        acontext.startActivity(intent);
                    }
                        clickCount++;
                        preferences.edit().putInt("KEY_CLICK_COUNT", clickCount).apply();

                }

            });

            **Button2**.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    final Intent intent = new Intent(acontext, Activity2.class);

                    //Some code with an intent
                    // I want my logic to go in here for 5 clicks per ad.
                    // I don't want to repeat myself since i have several such 
                    //buttons with a different intent
                }
            });



}
}

1 Ответ

0 голосов
/ 18 июня 2020

Так же просто, как p ie

public void handleClick(Class destination, int buttonType){
        final ModelStatus modelStatus = arrayList.get(getAdapterPosition());
        final Intent intent = new Intent(getAppContext(), destination);
        mInterstitialAd.setAdListener(new AdListener() {
            @Override
            public void onAdClosed() {
                acontext.startActivity(intent);
            }
        });
        SharedPreferences preferences = acontext.getSharedPreferences("PREFRENCE",
                Context.MODE_PRIVATE);
        int clickCount = preferences.getInt("KEY_CLICK_COUNT"+buttonType, 1);

        if (clickCount % 6 == 0) {
            if (mInterstitialAd.isLoaded()) {
                mInterstitialAd.show();
            } else {
                acontext.startActivity(intent);
            };
        }else {
            acontext.startActivity(intent);
        }
        clickCount++;
        preferences.edit().putInt("KEY_CLICK_COUNT"+buttonType, clickCount).apply();
    }

Button1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                   handleClick(Activity1.class, 1);
                }

Button1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    handleClick(Whatever.class, 2);  
                }
...