正确的方法为适配器添加更多视图

时间:2017-10-19 19:04:08

标签: android firebase android-recyclerview admob adapter

我正在尝试修复一个小问题,即当我在适配器中每6个项目使用原生广告时(如下所示),我从firebase检索数据,问题是每6个帖子都有一个帖子丢失,这是因为它取代了广告。

这是我从firebase检索帖子的代码:

cell D3

这是我的适配器:

mDatabasePosts.addValueEventListener(new ValueEventListener() {
                    @Override public void onDataChange(DataSnapshot dataSnapshot) {
                        for (DataSnapshot dataSnapshot2 : dataSnapshot.getChildren()){

                            model_class value = dataSnapshot2.getValue(model_class.class);

                            //I think the solution should be here

                            mPosts_List.add(value);

                            //I think the solution should be here

                            mPosts_Adapter.notifyDataSetChanged();
                        }
                    }
                    @Override public void onCancelled(DatabaseError databaseError) {}});

因此,任何机构都可以给我解决方案,例如每6个位置复制帖子以显示它们或者是否有简单的解决方案..所以请帮助我兄弟。

3 个答案:

答案 0 :(得分:0)

您需要为每次添加增加项目数。

@Override public int getItemCount() {
   return mPosts_List.isEmpty() ? 0 : mPosts_List.size() + (mPosts_List.size() / 6) + 1;
}

如果您的头部视图不代表您的数据,也会添加+1。

<强>更新

@Override public retrieve_data getItemAtPosition(int position) {
   return mPost_List.get(position - (position / 6) - 1)
}

您需要在 onBindHolder 中使用此方法来检索数据。

retrieve_data model = mPosts_List.get(position)

替换为

retrieve_data model = getItemAtPosition(position)

答案 1 :(得分:0)

问题可能是当您绑定帖子视图时,您将获得具有给定位置的数据。

您应该将索引减少到不会在每六个项目的广告视图对应的数据阵列中跳转位置。

这样的东西
case Posts_View:
        posts_handler_b Normal_Holder = (posts_handler_b) holder;

        retrieve_data model = mPosts_List.get(position - (position / 6) - 1);
        Normal_Holder.Card_View_Time(model.getH());
        Normal_Holder.Card_View_Handler(model.getK(),position);break;

答案 2 :(得分:0)

问题在于,您没有通过在position中的项目之间插入视图来说明您在onBindViewHolder()给出的mPosts_List中创建的差异。

解决此问题的最简单方法是在您拥有position视图类型时调整Posts_View值。

case Post_View:
    int adjustedPosition = position - (position / 6) - 1