Как импортировать библиотеку twoway-view?

371
14 февраля 2017, 18:36

Есть такая библиотека 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

Answer 1

В итоге вся магия вот в этих строчках

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);
    }
}
}

результат получается такой как на картинке у меня в вопросе

READ ALSO
netty ArrayIndexOutOfBoundsException: 1

netty ArrayIndexOutOfBoundsException: 1

Добрый день! Я новичок в программировании, осваиваю java и netty 4Пишу небольшое клиент-серверное приложение с использованием netty

318
Как отображать временные данные?

Как отображать временные данные?

Я создал сайт вопросов и хочу при ответе пользователя на вопросы сделать клик на варианты radio buttonВыбранный вариант должен загрузиться во временную...

291
отправка запросов в БД mySQL на удаленный сервер(для начинающих)

отправка запросов в БД mySQL на удаленный сервер(для начинающих)

Здравствуйте, как начинающий полезно знать ответ, чтобы двигаться дальше

365