Есть такая библиотека twoway-view
которая позволяет создать кастомный recycler view как мне нужно
https://github.com/lucasr/twoway-view
Вот только не пойму как правильно ее импортировать
Согласно описанию нужно сделать вот так
compile 'org.lucasr.twowayview:twowayview:0.1.4'
Но сразу есть проблемы когда делаешь ставишь этот кастомный recycler view
в разметку
<org.lucasr.twowayview.widget.TwoWayView
android:id="@+id/rvMain"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:twowayview_layoutManager="StaggeredGridLayoutManager"
app:twowayview_numColumns="2"
app:twowayview_numRows="2"
/>
Пространство имен определено, но там нет имен свойств так что пришлось руками найти все attrs.xml в репозитории этой библиотеки и добавить их к себе(как по мне очень не удобно как для lib у которой 4500 звезд рейтинга)
Ну ок, потом я начал работать с адаптером и создал свой на основе из примера, но мой проект не видит импорты
import com.fittingroom.newtimezone.view.activityMainNew.recyclerViewUtil.twowayview.TwoWayLayoutManager;
import org.lucasr.twowayview.TwoWayLayoutManager;
import org.lucasr.twowayview.widget.SpannableGridLayoutManager;
import org.lucasr.twowayview.widget.StaggeredGridLayoutManager;
import org.lucasr.twowayview.widget.TwoWayView;
я не знаю, что такое snapshot (в гугле написано, что это снимок состояния проекта) , но что это значит в описании к этой lib не пойму, но попробовал импортировать это в свой проект
repositories {
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}
dependencies {
compile 'org.lucasr.twowayview:core:1.0.0-SNAPSHOT@aar'
compile 'org.lucasr.twowayview:layouts:1.0.0-SNAPSHOT@aar'
}
и тогда мне проект показал , что я пытаюсь импортировать эту lib более одного раза
В общем не пойму как это должно работать? Кто работал с этой lib подскажите в чем секрет?
Или может посоветуете другой подход? Мне вообще нужно сделать вот такой recycler view
CardView я уже сделал мне нужно теперь разобраться как сделать вот такой шаблон как на картинке для моего recycler view
В итоге вся магия вот в этих строчках
StaggeredGridLayoutManager.LayoutParams layoutParams =
(StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams();
layoutParams.setFullSpan(true);
Вот так выглядит мой адаптер
public class AdapterRecViewMain
extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<BaseMarkerElement> mainCardList;
private final int HEADER_VIEW = 0;
private final int FOOTER_VIEW = 1;
public AdapterRecViewMain() {
}
public void setData(List<BaseMarkerElement> mainCardList) {
this.mainCardList = mainCardList;
}
@Override public int getItemViewType(int position) {
if (position == 0) {
return HEADER_VIEW;
}
return FOOTER_VIEW;
}
@Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int type) {
if (type == FOOTER_VIEW) {
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.card_main_activity, viewGroup, false);
return new MainCardViewHolder(v);
} else {
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.header_view_main_activity, viewGroup, false);
return new HeaderViewHolder(v);
}
}
@Override public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int positionItem) {
final int position = viewHolder.getAdapterPosition();
if (viewHolder instanceof HeaderViewHolder) {
StaggeredGridLayoutManager.LayoutParams layoutParams =
(StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams();
layoutParams.setFullSpan(true);
BaseMarkerElement item = mainCardList.get(position);
if (item instanceof HeaderView) {
HeaderView header = (HeaderView) mainCardList.get(position);
// need to add implementation
}
} else if (viewHolder instanceof MainCardViewHolder) {
MainCardViewHolder currentView = (MainCardViewHolder) viewHolder;
CardMainActivity currentCard = (CardMainActivity) mainCardList.get(position);
currentView.ivMainCard.setImageResource(currentCard.getIvMainCard());
currentView.tvBrandName.setText(currentCard.getTvBrandName());
currentView.tvPrice.setText(currentCard.getTvPrice());
currentView.tvType.setText(currentCard.getTvType());
}
}
@Override public int getItemCount() {
return mainCardList.size();
}
private class MainCardViewHolder extends RecyclerView.ViewHolder {
ImageView ivMainCard;
TextView tvBrandName;
TextView tvType;
TextView tvPrice;
MainCardViewHolder(View view) {
super(view);
ivMainCard = (ImageView) view.findViewById(R.id.imageViewMainCard);
tvBrandName = (TextView) view.findViewById(R.id.tvBrandName);
tvType = (TextView) view.findViewById(R.id.tvType);
tvPrice = (TextView) view.findViewById(R.id.tvPrice);
}
}
private class HeaderViewHolder extends RecyclerView.ViewHolder {
public HeaderViewHolder(View itemView) {
super(itemView);
}
}
}
результат получается такой как на картинке у меня в вопросе
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Добрый день! Я новичок в программировании, осваиваю java и netty 4Пишу небольшое клиент-серверное приложение с использованием netty
Я создал сайт вопросов и хочу при ответе пользователя на вопросы сделать клик на варианты radio buttonВыбранный вариант должен загрузиться во временную...
Здравствуйте, как начинающий полезно знать ответ, чтобы двигаться дальше