Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.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
Android 在回收器GridLayoutManager中增加3行和4行项目之间的间距_Android_Android Custom View_Android Recyclerview_Gridlayoutmanager - Fatal编程技术网

Android 在回收器GridLayoutManager中增加3行和4行项目之间的间距

Android 在回收器GridLayoutManager中增加3行和4行项目之间的间距,android,android-custom-view,android-recyclerview,gridlayoutmanager,Android,Android Custom View,Android Recyclerview,Gridlayoutmanager,我正在使用RecyclerView和GridLayoutManager作为公共汽车票预订的布局。一切正常,但除了我坚持使用逻辑的地方,我必须在所有行中的3和4列项目之间留出更多的间距。基本上我的布局应该像下面所附的截图一样 我的要求: 电流输出: 我还发布了我完整的RecyclerView GridLayoutManager,供您参考,如下所示 multielectrecycleServiceAdapter.java public class MultiSelectRecyclerViewA

我正在使用RecyclerView和GridLayoutManager作为公共汽车票预订的布局。一切正常,但除了我坚持使用逻辑的地方,我必须在所有行中的3和4列项目之间留出更多的间距。基本上我的布局应该像下面所附的截图一样

我的要求:

电流输出:

我还发布了我完整的RecyclerView GridLayoutManager,供您参考,如下所示

multielectrecycleServiceAdapter.java

public class MultiSelectRecyclerViewAdapter extends SelectableAdapter<MultiSelectRecyclerViewAdapter.ViewHolder> {

    private ArrayList<String> mArrayList;
    private Context mContext;
    private ViewHolder.ClickListener clickListener;



    public MultiSelectRecyclerViewAdapter (Context context, ArrayList<String> arrayList,ViewHolder.ClickListener clickListener) {
        this.mArrayList = arrayList;
        this.mContext = context;
        this.clickListener = clickListener;

    }

    // Create new views
    @Override
    public MultiSelectRecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                             int viewType) {

        View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(
                R.layout.row_multiselect, null);

        ViewHolder viewHolder = new ViewHolder(itemLayoutView,clickListener);

        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int position) {

        viewHolder.tvName.setText(mArrayList.get (position));

        viewHolder.selectedOverlay.setVisibility(isSelected(position) ? View.VISIBLE : View.INVISIBLE);

    }

    @Override
    public int getItemCount() {
        return mArrayList.size();
    }

    public static class ViewHolder extends RecyclerView.ViewHolder  implements View.OnClickListener,View.OnLongClickListener  {

        public TextView tvName;
        private ClickListener listener;
        private final View selectedOverlay;


        public ViewHolder(View itemLayoutView,ClickListener listener) {
            super(itemLayoutView);

            this.listener = listener;

            tvName = (TextView) itemLayoutView.findViewById(R.id.tvName);
            selectedOverlay = (View) itemView.findViewById(R.id.selected_overlay);

            itemLayoutView.setOnClickListener(this);

            itemLayoutView.setOnLongClickListener (this);
        }

        @Override
        public void onClick(View v) {
            if (listener != null) {
                listener.onItemClicked(getAdapterPosition ());
            }
        }
        @Override
        public boolean onLongClick (View view) {
            if (listener != null) {
                return listener.onItemLongClicked(getAdapterPosition ());
            }
            return false;
        }

        public interface ClickListener {
            public void onItemClicked(int position);

            public boolean onItemLongClicked(int position);
        }
        }
    }
public class MultiSelectRecyclerViewActivity extends AppCompatActivity implements MultiSelectRecyclerViewAdapter.ViewHolder.ClickListener {

    private Toolbar toolbar;

    private RecyclerView mRecyclerView;
    private MultiSelectRecyclerViewAdapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;

    private ArrayList<String> mArrayList  = new ArrayList<String>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);
        setContentView(R.layout.activity_multiselect);
        toolbar = (Toolbar) findViewById(R.id.toolbar);


        for (int i = 1; i <= 48; i++) {

            mArrayList.add ( ""+ i);
        }

        if (toolbar != null) {
            setSupportActionBar(toolbar);
            getSupportActionBar().setTitle("MultiSelectRecylcerView");

        }

        mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
        mRecyclerView.setHasFixedSize(true);
        mRecyclerView.setLayoutManager(new GridLayoutManager (this,4));
        mAdapter = new MultiSelectRecyclerViewAdapter (MultiSelectRecyclerViewActivity.this,mArrayList,this);
        mRecyclerView.setAdapter (mAdapter);


    }

    @Override
    public void onItemClicked (int position) {

        toggleSelection(position);
    }

    @Override
    public boolean onItemLongClicked (int position) {
        toggleSelection(position);

        return true;
    }

    private void toggleSelection(int position) {
        mAdapter.toggleSelection (position);

    }
}

请帮助我解决我的问题的任何技巧和解决方案。我完全被困在如何使用RecyclerView来处理这个需求和逻辑上,我认为这应该是一种优化的方法。提前感谢。

在这里使用物品装饰可能会产生一些问题。如果您计划处理单击项目,则单击空白区域将被解释为单击位于内部列中的项目

您可以将GridLayoutManager配置为处理一个或多个列,并将空间处理为特定的视图类型。我将代码放在实现这种方法的地方


希望这能有所帮助。

在这种情况下,使用物品装饰可能会产生一些问题。如果您计划处理单击项目,则单击空白区域将被解释为单击位于内部列中的项目。您是否尝试将GridLayoutManager配置为处理多个列,并将空间作为特定视图类型处理?我将代码放在实现这种方法的地方。如果你能帮忙,请告诉我。太棒了。这就是我要找的。请将此作为答复。我会接受它,这样对别人会有帮助。感谢你的工作。我已经发布了答案。。。很高兴我能帮上忙:)@Chandru:这个解决方案对你有用吗?因为,在该代码中,它也将以空视图作为座位。比如说,如果有41个座位,那么使用该代码,用户只能在屏幕上查看33个座位
mRecyclerView.setLayoutManager(new GridLayoutManager(context, NUM_COLUMNS);
ItemOffsetDecoration itemDecoration = new ItemOffsetDecoration(context, R.dimen.item_offset);
mRecyclerView.addItemDecoration(itemDecoration);