#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 строк содержимого.