我打算在同一网格视图中使用两种不同的列表。例如,基本上说一个汽车列表和一个自行车列表。
我想将它们都显示在同一网格视图中。
我还想在汽车列表之前甚至在自行车列表之前显示标题。我想要如下所示的东西。
我知道网络上还有许多此类帖子以及StackOverflow,但它们都无法回答我的问题。然后有些人指向粘性标头库,有些建议将元素转换为标头,这将再次需要我无法执行的复杂位置管理。
任何建议或帮助将不胜感激。
答案 0 :(得分:2)
还This研究This is a another one 第一个是库,第二个是github中的项目
我认为This is a another one在您的图片中很相似
答案 1 :(得分:2)
您需要创建一个具有自定义侦听器接口的自定义适配器类,并且可以 检测按钮是否已通过此侦听器单击。
public class YourAdapter extends BaseAdapter {
private YourCustomListener listener;
private List<Object> yourObjects;
private Context mContext;
public YourAdapter(final Context context, final YourCustomListener listener, final List<Object> yourObjects) {
this.listener = listener;
this.yourObjects = yourObjects;
mContext = context;
}
@Override
public int getCount() {
return yourObjects.size();
}
@Override
public Object getItem(final int position) {
return yourObjects.get(position);
}
@Override
public long getItemId(final int position) {
return position;
}
@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
Button button;
View view;
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(mContext);
view = inflater.inflate(R.layout.yourLayout, parent, false);
} else {
view = convertView;
}
final Object obj = getItem(position);
button = view.findViewById(R.id.yourbuttonid);
if (listener != null) {
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {
listener.onButtonOnItemClicked(obj);
}
});
}
return view;
}
public void setListener(YourCustomListener listener) {
this.listener = listener;
}
public interface YourCustomListener {
void onButtonOnItemClicked(Object obj);
}
}
答案 2 :(得分:0)
我认为解决方案很简单。创建RecyclerView并使用“网格布局”。创建一个适配器,并在其中使用两种类型的项。使用方法spanSizeLookup,覆盖getSpanSize()函数并为第(1)节设置大小,并为其他项设置大小。就是这样。
spanSizeLookup的Kotlin代码:
val layoutManager = (recyclerView.layoutManager as GridLayoutManager)
layoutManager.spanSizeLookup = object : SpanSizeLookup() {
override fun getSpanSize(position: Int): Int {
return if (adapter.getItem((position) is Section) layoutManager.spanCount else 1
}
}
}