Объявления Recyclerview

#android #android-recyclerview #admob

#Android #android-recyclerview #admob

Вопрос:

Я новичок в Android. Я создаю простое приложение, в котором я хочу показывать рекламные баннеры в RecyclerView. После нескольких элементов должно отображаться рекламное объявление. У меня есть 1 recyclerview, 1 адаптер и извлечение данных из текстового файла, размещенного в папке ресурсов. Я просмотрел все руководства в Google, но не понял, нужна помощь.

Основная активность

         protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_sad);

                RecyclerView quoteList = findViewById(R.id.quoteList);
                quoteList.setLayoutManager(new LinearLayoutManager(this));
                quoteList.setAdapter(new QuotesAdapter(getQuotes(),this));


            }

            private List<String> getQuotes() {
                List<String> quotes = new ArrayList<>();
                BufferedReader bufferedReader = null;

                try {
                    bufferedReader = new BufferedReader(new InputStreamReader(this.getAssets().open("text1.txt"), StandardCharsets.UTF_8));
                    String line;
                    while ((line = bufferedReader.readLine()) != null) {
                        quotes.add(line);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    if (bufferedReader != null) {
                        try {
                            bufferedReader.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
                return quotes;
            }
  

xml

     <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@ id/li"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        android:orientation="vertical"
        tools:context=".MainActivity">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:background="#9c27B0"
            android:gravity="center"
            android:text="@string/app_name"
            android:textColor="#fff"
            android:textSize="24sp" />

        <android.support.v7.widget.RecyclerView
            android:id="@ id/quoteList"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        </android.support.v7.widget.RecyclerView>
    </LinearLayout>
  

пользовательское описание

 <LinearLayout
        android:padding="16dp"
        android:id="@ id/quoteContainer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorAccent"
        android:orientation="vertical">

        <ImageView
            android:layout_width="38dp"
            android:layout_height="38dp"
            android:src="@drawable/quote"
            android:tint="#fff"/>

        <TextView
            android:id="@ id/txtQuote"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="This is a Sample quote. You can write anything you want."
            android:textColor="#fff"
            android:gravity="center"
            android:textSize="22sp" />
    </LinearLayout>
  

Комментарии:

1. с какой проблемой вы столкнулись

Ответ №1:

Если вы правильно поняли, вы хотите показывать рекламу в вашем recyclerview через определенные промежутки времени. В этом случае вам придется внести некоторые изменения в свой адаптер.

Сначала определите эти переменные в вашем адаптере.

 static final int VIEW_TYPE_NEWS = 0;
static final int VIEW_TYPE_AD = 1;
boolean isAd = false;
  

Далее в вашем методе onCreateViewHolder вы должны сделать что-то вроде этого. Смотрите, есть два разных макета list_item, не забудьте создать их в своих макетах.

    @Override
    public ViewHolderNews onCreateViewHolder(ViewGroup parent, int viewType) {
        int layoutId = -1;

        switch (viewType) {
            case VIEW_TYPE_AD:
                layoutId = R.layout.list_ad_item;
                break;
            case VIEW_TYPE_NEWS:
                layoutId = R.layout.list_news_item;
                break;
        }

        View view = LayoutInflater.from(parent.getContext())
                .inflate(layoutId, parent, false);

        return new ViewHolderNews(view);
}
  

Затем onBindViewHolder:

     @Override
    public void onBindViewHolder(ViewHolderNews holder, int position) {

        switch (getItemViewType(position)) {
            case VIEW_TYPE_AD:
                // Create an ad request. Check logcat output for the hashed device ID to
                // get test ads on a physical device. e.g.
                // "Use AdRequest.Builder.addTestDevice("ABCDEF012345") to get test ads on this device."

                // Load your ad here.

                break;

            case VIEW_TYPE_NEWS:

               // Load your normal content here.

                break;
        }
}
  

Наконец, последний способ переопределения — это:

     @Override
    public int getItemViewType(int position) {
        int positionNew = position   1;
        if ((positionNew % ITEMS_PER_AD == 0) amp;amp; (position > 0)) {
            isAd = true;
            return VIEW_TYPE_AD;
        } else {
            isAd = false;
            return VIEW_TYPE_NEWS;
        }
}
  

Я надеюсь, что это решит вашу проблему.

Комментарии:

1. ITEMS_PER_AD — это еще одна переменная int, которую вы должны определить. Это, например: допустим, ITEMS_PER_AD = 7; это означает, что ваше объявление будет показано через 7 строк содержимого.