Ruang besar antar item di Android RecyclerView

Saya menggunakan RecyclerView untuk memuat data dari daftar objek yang diisi setiap kali saya menekan Enter di EditText. Namun masalah yang saya hadapi adalah item pertama yang saya tambahkan terlihat OK, ketika saya menambahkan item kedua terlihat kesenjangan yang besar antara item pertama dan kedua, dan jika saya terus menambahkan item, kesenjangan tersebut semakin besar dan daftarnya tidak ' tidak cocok untuk seluruh layar.

Ini Adaptor saya:

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

Ini adalah XML untuk Adaptor:

<?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>

Ini adalah kode XML untuk RecyclerView di dalam Aktivitas saya:

<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"/>

Beginilah cara recyclerView didefinisikan dalam Aktivitas saya:

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

Dan saya juga menggunakan kode ini untuk mengisinya di dalam Aktivitas saya:

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

person Marcos Guimaraes    schedule 29.08.2017    source sumber


Jawaban (2)


Adaptor Anda menggembungkan baris dengan layout_height="match_parent", ini berarti tinggi setiap baris akan sesuai dengan tinggi penuh RecyclerView. Mungkin Anda ingin menggunakan wrap_content saja:

<?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">
    ...
person lelloman    schedule 29.08.2017
comment
Terima kasih banyak! Saya tidak tahu tentang ini, itu berhasil. - person Marcos Guimaraes; 30.08.2017

cukup tambahkan properti android:layout_margin di tata letak induk dari baris daftar tata letak khusus Anda

person Asadullah Mumtaz    schedule 20.08.2019