将 admob 栏添加到 Recyclerview 的中间。索引越界异常
Adding the admob bar to the middle of the Recyclerview. IndexOutOfBoundsException
我有一个用 RecyclerView
制作的清单。我可以将广告添加到底部,但是当我想将它添加到中间时出现错误。
例如,我无法将广告添加到第 2 行。当我将 getItemCount
值增加 1 (return movies.size() + 1
) 时,我再次出错。我没试过的。
我的适配器
public class SeriesActivityAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<Movies> movies;
private static final int ITEM = 0;
private static final int BANNER = 1;
TinyDB tinyDB;
private Activity context;
public SeriesActivityAdapter(Activity c, List<Movies> movies) {
this.movies= movies;
this.context = c;
tinyDB = new TinyDB(c);
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if(viewType==BANNER && !tinyDB.getBoolean("remove_ads")){
View view = LayoutInflater.from(context).inflate(R.layout.item_ad, parent,false);
return new MyViewBanner(view);
}
else{
View view = LayoutInflater.from(context).inflate(R.layout.item_series_activity, parent,false);
return new MyViewHolder(view);
}
}
@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, final int position) {
if(holder instanceof MyViewHolder){
final Movies currentMovie = movies.get(position);
final MyViewHolder myholder = (MyViewHolder) holder;
Glide.with(context)
.load(currentMovie.getResim())
.into(myholder.movieImage);
}
else if (holder instanceof MyViewBanner){
final MyViewBanner myBanner = (MyViewBanner) holder;
AdRequest adRequest = new AdRequest.Builder().build();
myBanner.adView.loadAd(adRequest);
}
}
@Override
public int getItemCount() {
return movies.size() + 1;
}
@Override
public int getItemViewType(int position) {
if(position == 2){
return BANNER;
}
return ITEM;
}
}
我的Activity
JsonArrayRequest arrayRequest = new JsonArrayRequest(murl,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray jsonArray) {
Log.i("log-",jsonArray.toString());
for(int i = 0; i < jsonArray.length(); i++) {
try {
JSONObject jsonObject = jsonArray.getJSONObject(i);
users.add(new Movies(jsonObject.getString("link"),
jsonObject.getString("resim"),
"",jsonObject.getString("tip")));
}
catch(JSONException e) {
Log.i("log-","error"+e.getMessage());
}
}
moviesAdapter.notifyDataSetChanged();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {...
}
});
Volley.newRequestQueue(this).add(arrayRequest);
我的Logcat
Process: com.moktay.izliyoo, PID: 23423
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.get(ArrayList.java:411)
at com.moktay.izliyoo.list.SeriesActivityAdapter.onBindViewHolder(SeriesActivityAdapter.java:64)
在要在回收站视图中显示广告的位置,在 Arraylist 中传递 null。
假设在第 2 和 4 个位置,您希望广告在这些位置简单地添加 null,最后在 itemViewType 方法中检查
if(arraylist.get(position)==null)
{
return BANNER
}else{
return VIEWTYPE
}
我有一个用 RecyclerView
制作的清单。我可以将广告添加到底部,但是当我想将它添加到中间时出现错误。
例如,我无法将广告添加到第 2 行。当我将 getItemCount
值增加 1 (return movies.size() + 1
) 时,我再次出错。我没试过的。
我的适配器
public class SeriesActivityAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<Movies> movies;
private static final int ITEM = 0;
private static final int BANNER = 1;
TinyDB tinyDB;
private Activity context;
public SeriesActivityAdapter(Activity c, List<Movies> movies) {
this.movies= movies;
this.context = c;
tinyDB = new TinyDB(c);
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if(viewType==BANNER && !tinyDB.getBoolean("remove_ads")){
View view = LayoutInflater.from(context).inflate(R.layout.item_ad, parent,false);
return new MyViewBanner(view);
}
else{
View view = LayoutInflater.from(context).inflate(R.layout.item_series_activity, parent,false);
return new MyViewHolder(view);
}
}
@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, final int position) {
if(holder instanceof MyViewHolder){
final Movies currentMovie = movies.get(position);
final MyViewHolder myholder = (MyViewHolder) holder;
Glide.with(context)
.load(currentMovie.getResim())
.into(myholder.movieImage);
}
else if (holder instanceof MyViewBanner){
final MyViewBanner myBanner = (MyViewBanner) holder;
AdRequest adRequest = new AdRequest.Builder().build();
myBanner.adView.loadAd(adRequest);
}
}
@Override
public int getItemCount() {
return movies.size() + 1;
}
@Override
public int getItemViewType(int position) {
if(position == 2){
return BANNER;
}
return ITEM;
}
}
我的Activity
JsonArrayRequest arrayRequest = new JsonArrayRequest(murl,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray jsonArray) {
Log.i("log-",jsonArray.toString());
for(int i = 0; i < jsonArray.length(); i++) {
try {
JSONObject jsonObject = jsonArray.getJSONObject(i);
users.add(new Movies(jsonObject.getString("link"),
jsonObject.getString("resim"),
"",jsonObject.getString("tip")));
}
catch(JSONException e) {
Log.i("log-","error"+e.getMessage());
}
}
moviesAdapter.notifyDataSetChanged();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {...
}
});
Volley.newRequestQueue(this).add(arrayRequest);
我的Logcat
Process: com.moktay.izliyoo, PID: 23423
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.get(ArrayList.java:411)
at com.moktay.izliyoo.list.SeriesActivityAdapter.onBindViewHolder(SeriesActivityAdapter.java:64)
在要在回收站视图中显示广告的位置,在 Arraylist 中传递 null。
假设在第 2 和 4 个位置,您希望广告在这些位置简单地添加 null,最后在 itemViewType 方法中检查
if(arraylist.get(position)==null)
{
return BANNER
}else{
return VIEWTYPE
}