LayoutManager для Recyclerview с другим объемом ячейки - PullRequest
0 голосов
/ 23 мая 2018

Я работаю над созданием интерфейса представления рециркулятора, который выглядит следующим образом: My target interface

В настоящее время я использую только просмотр рециркулятора с LinearLayoutManager с использованием адаптера с двумя держателями просмотра, я попробовалМенеджер gridLayout тоже, но я не достиг целевого интерфейса: мне нужна помощь в достижении этого. Нужно ли мне создавать собственный менеджер макетов?или что именно я должен сделать?Пожалуйста, я действительно застрял в этом.

Это мой код адаптера

 public class SimpleStringRecyclerViewAdapter : RecyclerView.Adapter
        {

            private List<Data> mValues;


           private Context context;
            private  const int TYPE_FULL = 0;
            private  const int TYPE_HALF = 1;
            private  const int TYPE_QUARTER = 2;

            public SimpleStringRecyclerViewAdapter(Context context, List<Data> items)
            {
                this.context = context;
                mValues = items;

            }

            public override int ItemCount
            {

                get
                {
                    return mValues.Count();
                }
            }

            public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
            {
                if (holder is SimpleViewHolder)
                    try
                    {
                        Data item = mValues.ElementAt(position);

                        var simpleHolder = holder as SimpleViewHolder;

                        simpleHolder.mTxtView.Text = Android.Text.Html.FromHtml(item.article.Title).ToString();
                        simpleHolder.mTxtView2.Text = item.article.Description;


                        using (var imageView = simpleHolder.mImageView)
                        {
                            string url = Android.Text.Html.FromHtml(item.article.UrlToImage).ToString();

                            //Download and display image
                            UrlImageViewHelper.SetUrlDrawable(imageView,
                                url, Resource.Drawable.cheese_1
                                );



                        }
                        //    simpleHolder.mprogressbar.Visibility = ViewStates.Gone;
                    }
                    catch (Exception e)
                    {
                        //Toast.MakeText(this.context, e.ToString(), ToastLength.Long).Show();
                    }
                else
                {
                    try
                    {
                        Data item = mValues.ElementAt(position);
                        var simpleHolder = holder as SimpleViewHolder2;

                        simpleHolder.mTxtView.Text = Android.Text.Html.FromHtml(item.youTubeItem.Title).ToString();
                        // simpleHolder.mTxtView2.Text = item.DescriptionShort;


                        using (var imageView = simpleHolder.mImageView)
                        {
                            string url = Android.Text.Html.FromHtml(item.youTubeItem.MaxResThumbnailUrl).ToString();

                            //Download and display image
                            UrlImageViewHelper.SetUrlDrawable(imageView,
                                url, Resource.Drawable.cheese_1
                                );



                        }
                    }
                    catch (Exception e)
                    {
                        //Toast.MakeText(this.context, e.ToString(), ToastLength.Long).Show();
                    }

                }
            }

            public override int GetItemViewType(int position)
            {
                if (mValues.ElementAt(position).type == 1)
                {
                    return Resource.Layout.ItemsList;
                }

                else
                {
                    return Resource.Layout.VideoList;
                }
            }



            public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
            {
                if (viewType == Resource.Layout.ItemsList)
                {
                    View view = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.ItemsList, parent, false);
                    view.SetBackgroundColor(Color.White);


                    SimpleViewHolder holder = new SimpleViewHolder(view);
                    // holder.mprogressbar = view.FindViewById<ProgressBar>(Resource.Id.progressBar);
                    // holder.mprogressbar.Visibility = ViewStates.Visible;


                    //Showing loading progressbar

                    return holder;
                }
                else
                {
                    View view = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.VideoList, parent, false);
                    view.SetBackgroundColor(Color.White);
                    SimpleViewHolder2 holder = new SimpleViewHolder2(view);

                    return holder;
                }

            }
        }

        public class SimpleViewHolder : RecyclerView.ViewHolder
        {
            public string mBoundString;
            public readonly View mView;
            public readonly ImageView mImageView;
            public readonly TextView mTxtView;
            public readonly TextView mTxtView2;
            //   public ProgressBar mprogressbar;


            public SimpleViewHolder(View view) : base(view)
            {
                mView = view;
                mImageView = view.FindViewById<ImageView>(Resource.Id.avatar2);
                mTxtView = view.FindViewById<TextView>(Resource.Id.Text11);
                mTxtView2 = view.FindViewById<TextView>(Resource.Id.Text12);
                //   mprogressbar = view.FindViewById<ProgressBar>(Resource.Id.progressBar);


            }




            public override string ToString()
            {
                return base.ToString() + " '" + mTxtView.Text;

            }
        }
        public class SimpleViewHolder2 : RecyclerView.ViewHolder
        {
            public string mBoundString;
            public readonly View mView;
            public readonly ImageView mImageView;
            public readonly TextView mTxtView;
            public readonly TextView mTxtView2;


            public SimpleViewHolder2(View view) : base(view)
            {
                mView = view;
                mImageView = view.FindViewById<ImageView>(Resource.Id.videoavatar);
                mTxtView = view.FindViewById<TextView>(Resource.Id.videoText1);
                //   mprogressbar = view.FindViewById<ProgressBar>(Resource.Id.progressBar);


            }
        }

Метод SetUpRecyclerView:

    dataUse = OfflineDeserializer.OfflineData(content, json2);
    recyclerView.SetLayoutManager(new LinearLayoutManager(recyclerView.Context));
    recyclerView.SetAdapter(new SimpleStringRecyclerViewAdapter(recyclerView.Context, dataUse));
    if (vp.IsShown)
    {
        vp.Visibility = ViewStates.Invisible;

    }

Это то, что у меня сейчас:

I am stuck here

1 Ответ

0 голосов
/ 23 мая 2018

вы можете использовать представление рециркулятора с несколькими типами представлений. Вот ссылка, на которую вы можете ссылаться

Recyclerview с несколькими типами представлений

Вот пример кода, который вы можете изменитьэто в соответствии с вашими потребностями

public class MyFeedsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {


final int
        VIDEO = 1,
        IMAGE = 2,
        AUDIO = 3;



public MyFeedsAdapter(HomeActivity homeActivity, ArrayList<MyFeedsModel> list, MyFeedsFragment myFeedsFragment) {
    this.activity = homeActivity;
    this.list = list;
    this.myFeedsFragment = myFeedsFragment;
    metrics = new DisplayMetrics();
    activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);

}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view;
    switch (viewType) {
        case VIDEO:
            view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_myfeeds, parent, false);
            return new ViewForVideo(view);
        case IMAGE:
            view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_myfeeds, parent, false);
            return new ViewForImage(view);
        case AUDIO:
            view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_myfeeds, parent, false);
            return new ViewForAudio(view);
        default:
            return null;
    }
}

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
    if (list.get(position).getFile_type().equals(IntentString.VIDEO)) {
        setViewForVideo((ViewForVideo) holder, position);
    } else if (list.get(position).getFile_type().equals(IntentString.IMAGE)) {
        setViewForImage((ViewForImage) holder, position);
    } else if (list.get(position).getFile_type().equals(IntentString.AUDIO)) {
        setViewForAudio((ViewForAudio) holder, position);
    }
}

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

@Override
public int getItemViewType(int position) {
    if (list.get(position).getFile_type().equals(IntentString.VIDEO)) {
        return VIDEO;
    } else if (list.get(position).getFile_type().equals(IntentString.IMAGE)) {
        return IMAGE;
    } else if (list.get(position).getFile_type().equals(IntentString.AUDIO)) {
        return AUDIO;
    } else {
        return 0;
    }
}




public void setViewForVideo(final ViewForVideo holder, final int position) {

}

public void setViewForImage(final ViewForImage holder, final int position) {

}

public void setViewForAudio(final ViewForAudio holder, int position) {

}

public class ViewForVideo extends RecyclerView.ViewHolder {


    public ViewForVideo(View itemView) {
        super(itemView);

    }
}

public class ViewForImage extends RecyclerView.ViewHolder {

    public ViewForImage(View itemView) {
        super(itemView);

        ButterKnife.bind(this, itemView);

    }
}

public class ViewForAudio extends RecyclerView.ViewHolder {


    public ViewForAudio(View itemView) {
        super(itemView);

        ButterKnife.bind(this, itemView);


    }
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...