具有部分标题的Android Grid View

时间:2019-04-24 22:58:28

标签: java android android-recyclerview android-listview android-gridview

我打算在同一网格视图中使用两种不同的列表。例如,基本上说一个汽车列表和一个自行车列表。

我想将它们都显示在同一网格视图中。

我还想在汽车列表之前甚至在自行车列表之前显示标题。我想要如下所示的东西。

enter image description here

我知道网络上还有许多此类帖子以及StackOverflow,但它们都无法回答我的问题。然后有些人指向粘性标头库,有​​些建议将元素转换为标头,这将再次需要我无法执行的复杂位置管理。

任何建议或帮助将不胜感激。

3 个答案:

答案 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)

enter image description here

我认为解决方案很简单。创建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
    }
  }
}