Android RecyclerView中项目之间的大空间

时间:2017-08-29 20:41:38

标签: android android-recyclerview

我正在使用RecyclerView从每次在EditText中点击“Enter”时填充的对象列表中加载数据。但我面临的问题是,我添加的第一项显示OK,当我添加第二项时,它显示第一项和第二项之间存在很大差距,如果我继续添加项目,则差距会变大,列表也不会适合整个屏幕。

这是我的适配器:

public class CategoryAdapter extends RecyclerView.Adapter<CategoryAdapter.MyViewHolder> {

    private Context mContext;
    private List<Category> categoryList;
    private Category category;

    public class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView title, count;
        public EditText nameCategory;

        public MyViewHolder(View view) {
            super(view);
            nameCategory = (EditText) view.findViewById(R.id.edittext_category);
            //overflow = (ImageView) view.findViewById(R.id.overflow);
        }
    }


    public CategoryAdapter(Context mContext, List<Category> categoryList) {
        this.mContext = mContext;
        this.categoryList = categoryList;
    }

    @Override
    public CategoryAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.adapter_category, parent, false);

        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(final CategoryAdapter.MyViewHolder holder, final int position) {
        category = categoryList.get(position);
        holder.nameCategory.setText(category.getCategory_name());
    }


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

这是适配器的XML:

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

    <LinearLayout
        android:layout_below="@+id/toolbar"
        android:id="@+id/add_category_layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/minus_red"
            android:paddingTop="20dp"
            android:paddingLeft="20dp"
            android:paddingRight="20dp"
            android:paddingBottom="20dp"/>

        <EditText
            android:id="@+id/edittext_category"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="@string/add_new_category"
            android:textColorHint="#b1b1b1"
            android:textColor="@color/text_color"
            android:textSize="@dimen/s_text_size"
            android:paddingTop="20dp"
            android:background="#ffffff"
            android:maxLines="1"/>
    </LinearLayout>

</LinearLayout>

这是我的Activity中的RecyclerView的XML代码:

<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clipToPadding="false"
    android:scrollbars="vertical"
    android:visibility="invisible"
    android:layout_below="@id/layout_bar"/>

这就是我在Activity中定义recyclerView的方法:

recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

我也使用此代码在我的Activity中填充它:

edit_category.setOnKeyListener(new OnKeyListener() {
                            public boolean onKey(View v, int keyCode, KeyEvent event) {
                                // If the event is a key-down event on the "enter" button
                                if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
                                        (keyCode == KeyEvent.KEYCODE_ENTER)) {

                                    System.out.println("Entrou");
                                    Category category = new Category();
                                    category.setCategory_name(edit_category.getText().toString());
                                    categoriesList.add(category);
                                    adapter = new CategoryAdapter(getApplicationContext(), categoriesList);
                                    recyclerView.setAdapter(adapter);
                                    recyclerView.setVisibility(View.VISIBLE);
                                    edit_category.setText("");



                                    // hide virtual keyboard
                                    InputMethodManager imm =
                                            (InputMethodManager)getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                                    imm.hideSoftInputFromWindow(edit_category.getWindowToken(), 0);
                                    return true;
                                }
                                return false;
                            }
                        });

2 个答案:

答案 0 :(得分:5)

您的适配器正在使用layout_height="match_parent"对行进行充气,这意味着每行的高度将对应RecyclerView的完整高度。也许您想要使用wrap_content代替:

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

答案 1 :(得分:0)

只需在自定义布局列表行的父布局中添加android:layout_margin属性