Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带节标题的Android网格视图_Java_Android_Android Recyclerview_Android Listview_Android Gridview - Fatal编程技术网

Java 带节标题的Android网格视图

Java 带节标题的Android网格视图,java,android,android-recyclerview,android-listview,android-gridview,Java,Android,Android Recyclerview,Android Listview,Android Gridview,我计划在同一个网格视图中创建两种不同的列表。基本上,比如说一个汽车清单和一个自行车清单 我想在同一个网格视图中显示它们 我还想在cars列表之前甚至在bikes列表之前显示标题。我想要如下所示的东西 我知道网络上有很多这样的帖子,也有StackOverflow,但没有一个能回答我的问题。其中一些指向粘性标题库,一些建议将元素转换为标题,这将再次需要复杂的职位管理,我无法做到。 任何建议或帮助都将不胜感激。您需要创建一个具有自定义侦听器接口的自定义适配器类,您可以 检测按钮是否已通过此侦听器单击

我计划在同一个网格视图中创建两种不同的列表。基本上,比如说一个汽车清单和一个自行车清单

我想在同一个网格视图中显示它们

我还想在cars列表之前甚至在bikes列表之前显示标题。我想要如下所示的东西

我知道网络上有很多这样的帖子,也有StackOverflow,但没有一个能回答我的问题。其中一些指向粘性标题库,一些建议将元素转换为标题,这将再次需要复杂的职位管理,我无法做到。


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

您需要创建一个具有自定义侦听器接口的自定义适配器类,您可以 检测按钮是否已通过此侦听器单击

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

    }

}
公共类YourAdapter扩展BaseAdapter{
私人听众;
私人物品清单;
私有上下文;
公共YourAdapter(最终上下文上下文、最终YourCustomListener侦听器、最终列出对象){
this.listener=listener;
this.yourObjects=yourObjects;
mContext=上下文;
}
@凌驾
public int getCount(){
返回yourObjects.size();
}
@凌驾
公共对象getItem(最终int位置){
返回您的对象。获取(位置);
}
@凌驾
公共长getItemId(最终整数位置){
返回位置;
}
@凌驾
公共视图getView(最终整型位置、最终视图转换视图、最终视图组父视图){
按钮;
视图;
if(convertView==null){
LayoutFlater充气机=LayoutFlater.from(mContext);
视图=充气机。充气(R.layout.yourLayout,父级,false);
}否则{
视图=转换视图;
}
最终对象obj=获取项目(位置);
button=view.findViewById(R.id.yourbuttonid);
if(侦听器!=null){
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(最终视图v){
listener.onButtonNonItemClicked(obj);
}
});
}
返回视图;
}
public void setListener(YourCustomListener侦听器){
this.listener=listener;
}
自定义侦听器的公共接口{
void onbutton未单击项(对象对象对象);
}
}

您需要创建一个具有自定义侦听器接口的自定义适配器类,您可以 检测按钮是否已通过此侦听器单击

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

    }

}
公共类YourAdapter扩展BaseAdapter{
私人听众;
私人物品清单;
私有上下文;
公共YourAdapter(最终上下文上下文、最终YourCustomListener侦听器、最终列出对象){
this.listener=listener;
this.yourObjects=yourObjects;
mContext=上下文;
}
@凌驾
public int getCount(){
返回yourObjects.size();
}
@凌驾
公共对象getItem(最终int位置){
返回您的对象。获取(位置);
}
@凌驾
公共长getItemId(最终整数位置){
返回位置;
}
@凌驾
公共视图getView(最终整型位置、最终视图转换视图、最终视图组父视图){
按钮;
视图;
if(convertView==null){
LayoutFlater充气机=LayoutFlater.from(mContext);
视图=充气机。充气(R.layout.yourLayout,父级,false);
}否则{
视图=转换视图;
}
最终对象obj=获取项目(位置);
button=view.findViewById(R.id.yourbuttonid);
if(侦听器!=null){
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(最终视图v){
listener.onButtonNonItemClicked(obj);
}
});
}
返回视图;
}
public void setListener(YourCustomListener侦听器){
this.listener=listener;
}
自定义侦听器的公共接口{
void onbutton未单击项(对象对象对象);
}
}

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

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

谢谢你的回答。它解决了我的问题。但很抱歉,我不得不接受@Jimale-Abdi-answer,因为它告诉我如何实现节头。再次感谢。你可以通过得到答案来实现。谢谢你的回答。它解决了我的问题。但很抱歉,我不得不接受@Jimale-Abdi-answer,因为它告诉我如何实现节头。再次感谢。您可以通过将spanCountIt Lead设置为scroll performance lagging来实现这一目标。它将导致scroll performance lagging设置为scroll performance lagging