我的recyclerview适配器只是加载第一个Viewholder,

时间:2018-12-25 13:41:55

标签: android android-recyclerview adapter

有人可以帮助我使适配器加载3个Viewholder。我很想加载我的三个recyclerview,而不仅仅是一个。

下面的贝娄是代码:

private Context ctx;
private ArrayList<Feed_modell> feed_modellArrayList;
private static final int ads = 0;
private static final int videoDetails = 1;
private static final int recommendations = 2;


public infoFragment_adapter(Context ctx, ArrayList<Feed_modell> feedArrayList) {

    this.feed_modellArrayList = feedArrayList;
    this.ctx = ctx;
}

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    switch (viewType){
        case ads :

            View adsView = LayoutInflater.from(parent.getContext()).inflate(R.layout.native_ads_layout, parent, false);
            return new viewHolderAds(adsView,ctx);

        case videoDetails :

            default:

                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.video_details, parent, false);
                return new viewHolderDetails(view);

        case recommendations :

            View viewreco = LayoutInflater.from(parent.getContext()).inflate(R.layout.video_details, parent, false);
            return new viewHolderReco(viewreco);
    }
}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) {

    int viewtype = getItemViewType(position);
    final Feed_modell modell = feed_modellArrayList.get(position);

    switch (viewtype){
        case ads:

            viewHolderAds viewHolderAds = (viewHolderAds) holder;
            viewHolderAds.adView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    Intent intent = new Intent(ctx, edit_profile.class);
                    ctx.startActivity(intent);
                }
            });

            break;

        case videoDetails:

            viewHolderDetails viewHolderDetails = (viewHolderDetails) holder;
            viewHolderDetails.title.setText(modell.getTitle());
            viewHolderDetails.name.setText(modell.getName2());

            viewHolderDetails.title.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    Feed_modell modell = feed_modellArrayList.get(position);
                    // see the profile whom post this Video
                    Intent gotoProfile = new Intent(ctx, user_profile.class);
                    gotoProfile.putExtra("profilekey", modell.getUID());
                    ctx.startActivity(gotoProfile);
                }
            });

            break;


        case recommendations:

            viewHolderReco vhReco = (viewHolderReco) holder;
            vhReco.titleReco.setText(modell.getTitle());
            vhReco.nameReco.setText(modell.getName2());

            break;
    }
}

public static class viewHolderAds extends RecyclerView.ViewHolder {

    private View view;
    private AdRequest adRequest;
    private AdView adView;

    public viewHolderAds (View itemView, final Context ctx) {
        super(itemView);

        view = itemView;

        adView = view.findViewById(R.id.adView2);
        MobileAds.initialize(ctx.getApplicationContext(), "ca-app-pub-3940256099942544~3347511713");
        adRequest = new AdRequest.Builder().addTestDevice(AdRequest.DEVICE_ID_EMULATOR).build();
        adView.loadAd(adRequest);


    }
}

public static class viewHolderDetails extends RecyclerView.ViewHolder {

    TextView title, name;
    View view2;
    Context ctx;

    viewHolderDetails (View itemView) {
        super(itemView);

        view2 = itemView;
        title = view2.findViewById(R.id.title_Id);
        name = view2.findViewById(R.id.username_id);

    }

}

public static class viewHolderReco extends RecyclerView.ViewHolder {

    static TextView titleReco, nameReco;
    static ImageView image;
    View viewReco;
    Context ctx;

    viewHolderReco (View itemView) {
        super(itemView);

        viewReco = itemView;
        nameReco = viewReco.findViewById(R.id.namereco);
        image = viewReco.findViewById(R.id.imgviewreco);
        titleReco = viewReco.findViewById(R.id.titlereco);

    }

}

@Override
public int getItemCount() {
    return feed_modellArrayList.size();
}

@Override
public int getItemViewType(int position) {


    return position % 2 * 2;
}

也许我使用ItemViewType做错了 只是添加ispolum文本是因为stackoverflow不允许我在不添加更多详细信息的情况下问这个问题...

忽略此: Lorem ipsum是伪拉丁文本,用于Web设计,版式,布局和印刷,代替英文,着重强调内容中的设计元素。也称为占位符(或填充符)文本。这是用于实体模型的便捷工具。它有助于勾勒文档或演示文稿的视觉元素,例如字体,字体或布局。 Lorem ipsum大部分是古典作家和哲学家西塞罗(Cicero)拉丁文字的一部分。它的单词和字母已通过添加或删除进行了更改,从而故意使其内容变得毫无意义;它不再是真实的,正确的或可理解的拉丁语。尽管lorem ipsum仍然与古典拉丁相似,但实际上没有任何意义。由于西塞罗的文字中没有拉丁字母所对应的字母K,W或Z,因此通常会随机插入这些字母和其他字母以模仿欧洲语言的印刷外观,而在原版中找不到这些字母。

在专业背景下,经常发生这样的情况:私人或公司客户迫切希望发布出版物,并且呈现尚未准备好的实际内容。想想一个新闻博客,该博客在上线当天每天每小时都有内容。但是,审阅者往往会对可理解的内容(例如从报纸或互联网上复制的随机文本)分心。可能会专注于文本,而忽略布局及其元素。此外,随机文本可能会带来意想不到的幽默或冒犯性,这在公司环境中是无法接受的风险。 Lorem ipsum及其许多变种自1960年代初期开始使用,很有可能自16世纪开始使用。

2 个答案:

答案 0 :(得分:0)

将父版式的高度和宽度设置为wrap_content

答案 1 :(得分:0)

default方法中删除onCreateViewHolder(),从int viewtype = getItemViewType(position)中删除onBindViewHolder()。您应该通过检查Holder参数的实例来检查ViewHolder中的onBindViewHolder类型:

if(holder instanceOf viewHolderAds) {
    // todo
} else if(holder instanceOf(viewHolderDetails) {
    // todo
}

根据我所见,更改getItemViewType方法的原因是,它没有返回正确的值。