android - RecyclerView 在项目之间创建边距

标签 android android-recyclerview material-design

首先,很抱歉,如果这是一个愚蠢的问题。我不是懒惰。 所以,问题是,我试图在 Android 应用程序中实现 CardView/RecyclerView。我做到了,但问题是卡片一张一张地间隔开,我不知道如何解决。我探索了代码,但一切似乎都很好。

代码:

回收 View

<android.support.v7.widget.RecyclerView
        android:id="@+id/collapsing_recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical"
        android:padding="@dimen/activity_horizontal_margin">

 </android.support.v7.widget.RecyclerView>

CardView 项目

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v7.widget.CardView
    android:id="@+id/card_view"
    card_view:cardBackgroundColor="@color/colorAccent"
    android:layout_gravity="center"
    android:layout_width="fill_parent"
    android:layout_height="100dp"
    android:layout_margin="5dp"
    card_view:cardCornerRadius="2dp">

    <TextView
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="New Text"
        android:id="@+id/cardview.name" />

</android.support.v7.widget.CardView>


</LinearLayout>

适配器:

public class MyRecyclerViewAdapter extends RecyclerView
    .Adapter<MyRecyclerViewAdapter
    .DataObjectHolder> {
private static String LOG_TAG = "MyRecyclerViewAdapter";
private ArrayList<CardViewItem> mDataset;
private static MyClickListener myClickListener;

public static class DataObjectHolder extends RecyclerView.ViewHolder
        implements View
        .OnClickListener {
    TextView label;

    public DataObjectHolder(View itemView) {
        super(itemView);
        label = (TextView) itemView.findViewById(R.id.cardview_name);
        Log.i(LOG_TAG, "Adding Listener");
        itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        myClickListener.onItemClick(getAdapterPosition(), v);
    }
}

public void setOnItemClickListener(MyClickListener myClickListener) {
    this.myClickListener = myClickListener;
}

public MyRecyclerViewAdapter(ArrayList<CardViewItem> myDataset) {
    mDataset = myDataset;
}

@Override
public DataObjectHolder onCreateViewHolder(ViewGroup parent,
                                           int viewType) {
    View view = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.example_card_view, parent, false);

    DataObjectHolder dataObjectHolder = new DataObjectHolder(view);
    return dataObjectHolder;
}

@Override
public void onBindViewHolder(DataObjectHolder holder, int position) {
    holder.label.setText(mDataset.get(position).getName());;
}

public void addItem(CardViewItem dataObj, int index) {
    mDataset.add(index, dataObj);
    notifyItemInserted(index);
}

public void deleteItem(int index) {
    mDataset.remove(index);
    notifyItemRemoved(index);
}

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

public interface MyClickListener {
    public void onItemClick(int position, View v);
}
}

希望大家帮帮我。谢谢!

编辑:所以,我找到了答案。罪魁祸首是 android:layout_height="match_parent" 在我的 cardview 项目中。我将其更改为“wrap_content”并解决了问题。感谢您的帮助! :)

最佳答案

您是否在 RecyclerView 中尝试过 ItemDecoration ?这对于在 RecyclerView 中自定义分隔线很有用

你可以这样看: 我的自定义 ItemDecoration 像这样使用 getItemOffsets() :

public class MyItemDecoration extends RecyclerView.ItemDecoration {

    private final int decorationHeight;
    private Context context;

    public MyItemDecoration(Context context) {
        this.context = context;
        decorationHeight = context.getResources().getDimensionPixelSize(R.dimen.decoration_height);
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        super.getItemOffsets(outRect, view, parent, state);

        if (parent != null && view != null) {

            int itemPosition = parent.getChildAdapterPosition(view);
            int totalCount = parent.getAdapter().getItemCount();

            if (itemPosition >= 0 && itemPosition < totalCount - 1) {
                outRect.bottom = decorationHeight;
            }

        }

    }
}

然后您可以将您的 R.dimen.decoration_height 设置为您想要的值。

在我的 Activity 中,当我实例化我的 RecyclerListView 时,我需要这样做:

myList.addItemDecoration(MyItemDecoration(this))
myList.setLayoutManager(LinearLayoutManager(this))
myList.setAdapter(adapter)

希望对你有帮助

关于android - RecyclerView 在项目之间创建边距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39184393/

相关文章:

java - 导入google play服务后出错

android - gridview的每个网格中只出现一张图像

android - 向上滚动时折叠工具栏图像消失

android - 如何在按下时更改 Material float 操作按钮的颜色?

java - 使用 AsyncTask 实现启动屏幕后强制关闭

java - 在 android 中设置 TextView 的可见性不起作用

java - 如何将 json 数组从 recyclerView 传递到另一个 Activity

android - 启动 Activity 时错误膨胀类 android.support.v7.widget.RecyclerView

android - 如何将 firebase 数据加载到 recyclerview

java - Android更改 Material 高程阴影颜色