LQRAdapterLibrary
Универсальный адаптер (RecyclerView, ListView, GridView)
compile 'com.lqr.adapter:library:1.0.2'
LQRAdapterForAbsListView<тип данных> (контекст, набор данных, ссылка на макет элемента)
private List<String> mData = new ArrayList<>();
for (int i = 0; i < 100; i++) {
mData.add("item " + i);
}
//ListView
mLv.setAdapter(new LQRAdapterForAbsListView<String>(this, mData, R.layout.item_tv_list) {
@Override
public void convert(LQRViewHolderForAbsListView helper, String item, int position) {
helper.setText(R.id.tv, item);
}
});
//GridView
mGv = (GridView) findViewById(R.id.gv);
mGv.setAdapter(new LQRAdapterForAbsListView<String>(this, mData, R.layout.item_tv_list) {
@Override
public void convert(LQRViewHolderForAbsListView helper, String item, int position) {
helper.setText(R.id.tv, item);
}
});
LQRViewHolderForAbsListView предоставляет множество стандартных операций с элементами управления, таких как установка текста, цвета текста, фона, видимости и т. д. Каждый метод возвращает this, что означает возможность цепной операции для удобства быстрой разработки.
LQRAdapterForRecyclerView<тип данных> (контекст, набор данных, ссылка на макет элемента)
//RecyclerView
mRv.setAdapter(new LQRAdapterForRecyclerView<String>(this, mData, R.layout.item_tv_list) {
@Override
public void convert(LQRViewHolderForRecyclerView helper, String item, int position) {
helper.setText(R.id.tv, item);
}
});
LQRViewHolderForRecyclerView предоставляет множество стандартных операций с элементами управления, таких как установка текста, цвета текста, фона, видимости и т. д. Каждый метод возвращает this, что означает возможность цепной операции для удобства быстрой разработки.
LQRAdapterForRecyclerView<String> mAdapter = new LQRAdapterForRecyclerView(...);
//Необходимо использовать HeaderAndFooterAdapter в качестве адаптера RecyclerView
mRv.setAdapter(mAdapter.getHeaderAndFooterAdapter());
//Добавление заголовка
private void testAddHeaderView() {
TextView tv = new TextView(this);
...
tv.setText("heaer");
mAdapter.addHeaderView(tv);
}
//Добавление нижнего колонтитула
private void testAddFooterView() {
TextView tv = new TextView(this);
...
tv.setText("footer");
mAdapter.addFooterView(tv);
}
Если в проекте необходимо использовать несколько типов элементов представления, необходимо повторно реализовать метод getItemViewType, возвращаемое значение которого соответствует идентификатору ресурса макета различных типов представлений, например:
private static final int NOTIFICATION = R.layout.item_notification;
private static final int SEND_TEXT = R.layout.item_text_send;
private static final int RECEIVE_TEXT = R.layout.item_text_receive;
private static final int SEND_STICKER = R.layout.item_sticker_send;
private static final int RECEIVE_STICKER = R.layout.item_sticker_receive;
private static final int SEND_IMAGE = R.layout.item_image_send;
private static final int RECEIVE_IMAGE = R.layout.item_image_receive;
private static final int SEND_VIDEO = R.layout.item_video_send;
private static final int RECEIVE_VIDEO = R.layout.item_video_receive;
private static final int SEND_LOCATION = R.layout.item_location_send;
private static final int RECEIVE_LOCATION = R.layout.item_location_receive;
@Override
public int getItemViewType(int position) {
IMMessage msg = getData().get(position);
MsgTypeEnum msgType = msg.getMsgType();
if (msgType == MsgTypeEnum.notification) {
return NOTIFICATION;
}
if (msgType == MsgTypeEnum.text) {
if (msg.getDirect() == MsgDirectionEnum.Out) {
return SEND_TEXT;
} else {
return RECEIVE_TEXT;
}
}
if (msgType == MsgTypeEnum.custom) {
if (msg.getDirect() == MsgDirectionEnum.Out) {
return SEND_STICKER;
} else {
return RECEIVE_STICKER;
}
}
if (msgType == MsgTypeEnum.image) {
if (msg.getDirect() == MsgDirectionEnum.Out) {
return SEND_IMAGE;
} else {
return RECEIVE_IMAGE;
}
}
if (msgType == **Вот перевод текста на русский язык:**
MsgTypeEnum.video) { if (msg.getDirect() == MsgDirectionEnum.Out) { return SEND_VIDEO; } else { return RECEIVE_VIDEO; } } if (msgType == MsgTypeEnum.location) { if (msg.getDirect() == MsgDirectionEnum.Out) { return SEND_LOCATION; } else { return RECEIVE_LOCATION; }} return super.getItemViewType(position); }
Это код, который используется в моём проекте, и я предлагаю его в качестве примера.
Рекомендуется использовать вместе с LQRRecyclerView, что позволяет значительно повысить эффективность разработки, так как не нужно учитывать LayoutManager и разделительные линии.
Независимо от того, используется ли LQRAdapterForAbsListView или LQRAdapterForRecyclerView, можно отслеживать события для элементов через адаптер. Вот пример кода:
mAdapter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(LQRViewHolder helper, ViewGroup parent, View itemView, int position) {
helper.setText(R.id.tv, "Я был нажат");
}
});
mAdapter.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(LQRViewHolder helper, ViewGroup parent, View itemView, int position) {
helper.setText(R.id.tv, "Меня долго нажимали");
return false;
}
});
mAdapter.setOnItemTouchListener(new OnItemTouchListener() {
@Override
public boolean onItemTouch(LQRViewHolder helper, View childView, MotionEvent event, int position) {
helper.setText(R.id.tv, "Ко мне прикоснулись");
return false;
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )