简体   繁体   English

如何显示水平 Recyclerview - 无法显示水平项目

[英]How show a Horizontal Recyclerview - have trouble showing horizontal items

I want to show horizontal items in recyclerview, but I've tried but no work it all, only show me horizontal items with enlarge widh.我想在 recyclerview 中显示水平项目,但我已经尝试过但没有全部工作,只显示带有放大宽度的水平项目。

In Android Studio show as I want在 Android Studio 中显示我想要的

在此处输入图像描述

But in runtime in my movile, show me但是在我的电影运行时,给我看

在此处输入图像描述

The items is width wraped but the other items appear after scroll right separated of my previus item.这些项目是宽度换行的,但其他项目出现在我之前的项目向右滚动后。

This is my code.这是我的代码。

LIST_ITEM项目清单

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


    <LinearLayout
        android:id="@+id/linearFondo"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:background="@drawable/item_list_sel"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/imageView2"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:layout_gravity="center"
            app:srcCompat="@drawable/ruta"
            tools:srcCompat="@drawable/ruta" />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="5dp"
            android:orientation="vertical">

            <TextView
                android:id="@+id/tnombre"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:ellipsize="end"
                android:inputType="textMultiLine"
                android:lines="1"
                android:textAppearance="@style/TextAppearance.AppCompat.Medium"
                android:textSize="12sp"
                android:textStyle="bold"></TextView>

            <TextView
                android:id="@+id/thorarios"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:textAppearance="@style/TextAppearance.AppCompat.Small"
                android:textColor="@color/colorPrimary"
                android:textSize="10sp"
                android:visibility="gone"></TextView>

        </LinearLayout>

    </LinearLayout>
</LinearLayout>

And My Xml to show the recyclerview和我的 Xml 来展示 recyclerview

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="sitetech.NFCcheckPoint.ui.operador.CheckFragment">

    <!-- TODO: Update blank fragment layout -->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:background="@color/SuccessColor"
            android:gravity="center_vertical"
            android:orientation="horizontal"
            android:paddingLeft="10dp"
            android:paddingRight="10dp">

            <TextView
                android:id="@+id/tfecha"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="2"
                android:text="Fecha"
                android:textSize="20sp" />

            <Button
                android:id="@+id/bpruebas"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Pasar Tarjeta" />

        </LinearLayout>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:text="Ruta para el registro" />

        <com.omega_r.libs.omegarecyclerview.OmegaRecyclerView
            android:id="@+id/rlista"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:divider="#888"
            android:dividerHeight="0dp"
            android:fadeScrollbars="true"
            android:orientation="horizontal"
            android:overScrollMode="never"
            android:scrollbarAlwaysDrawHorizontalTrack="true"
            android:scrollbarAlwaysDrawVerticalTrack="false"
            android:scrollbars="horizontal"
            app:itemSpace="0dp"
            tools:listitem="@layout/ruta_sel_template">

        </com.omega_r.libs.omegarecyclerview.OmegaRecyclerView>

    </LinearLayout>
</LinearLayout>

And my Fragment code to load还有我要加载的片段代码

dataAdapter = new rutaSelAdapter(lista, new onItemClick() {
            @Override
            public void onClickItemList(View v, int position) {
                ToastHelper.info(lista.get(position).getNombre().toString());
            }
        });

        rlista.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false));
        rlista.setAdapter(dataAdapter);

And my dataAdapter class还有我的dataAdapter class

public class rutaSelAdapter extends OmegaRecyclerView.Adapter<rutaSelAdapter.ViewHolder> {
    public List<Ruta> lista;
    private onItemClick onItemClick;
    private Ruta selectedItem;

    public rutaSelAdapter(List<Ruta> l, onItemClick onclick) {
        lista = l;
        this.onItemClick = onclick;
        if (l.size() > 0)
            setSelectedItem(l.get(0));
    }

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

    @Override
    public rutaSelAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new rutaSelAdapter.ViewHolder(parent);
    }

    @Override
    public void onBindViewHolder(rutaSelAdapter.ViewHolder holder, int position) {
        Ruta dato = lista.get(position);
        holder.display(dato);
    }

    public void setSelectedItem(Ruta rx){
        selectedItem = rx;
    }

    public Ruta getSelectedItem(){
        return selectedItem;
    }

    public void updateData(Ruta bx) {
        boolean nuevo = true;
        for (Ruta rx : lista) {
            if (rx.getId() == bx.getId()) {
                lista.set(lista.indexOf(rx), bx);
                nuevo = false;
            }
            ToastHelper.info("Se a modificado el horario.");
        }

        if (nuevo) {
            lista.add(bx);
            ToastHelper.exito("Horario asignado.");
        }

        notifyDataSetChanged();
    }

    public void deleteData(Ruta rx) {
        //ToastHelper.normal("Se a eliminado el horario " + rx.getHora());
        lista.remove(rx);
        notifyDataSetChanged();
    }

    public class ViewHolder extends SwipeViewHolder implements View.OnClickListener {
        private final TextView tnombre;
        private LinearLayout linearFondo;
        HorarioDao horarioManager = AppController.daoSession.getHorarioDao();

        private Ruta currentItem;

        public ViewHolder(ViewGroup itemView) {
            super(itemView, R.layout.ruta_sel_template, SwipeViewHolder.NO_ID, SwipeViewHolder.NO_ID);

            tnombre = findViewById(R.id.tnombre);
            linearFondo = findViewById(R.id.linearFondo);
            contentView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    setSelectedItem(currentItem);
                    onItemClick.onClickItemList(v, getAdapterPosition());
                }
            });
        }

        private Ruta backItem;
        private void setSelection(Ruta rx){
            //if (backItem == null)

        }

        @Override
        public void onClick(final View v) {

        }

        public void display(Ruta rx) {
            currentItem = rx;
            if (rx.getNombre() == null) tnombre.setText("");
            else tnombre.setText(rx.getNombre().toString());
        }
    }
}

In Android Studio show me right as I want.在 Android Studio 中按我的意愿显示。

But in runtime, in my mobile the items have full width but wrap content.但在运行时,在我的手机中,项目具有全宽但包含内容。 enter image description here在此处输入图像描述

i think you just add notifyDataSetChanged in your class adapter我认为您只需在 class 适配器中添加 notifyDataSetChanged

public rutaSelAdapter(List<Ruta> l, onItemClick onclick) {
        lista = l;
        this.onItemClick = onclick;
        if (l.size() > 0)
            setSelectedItem(l.get(0));
        notifyDataSetChanged();
    }

In your recyclerview item layout update width of these 2 textviews [tnombre and thorarios] to wrap_content在您的 recyclerview 项目布局中,将这 2 个文本视图 [tnombre 和 thorarios] 的宽度更新为 wrap_content

<LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="5dp"
            android:orientation="vertical">

            <TextView
                android:id="@+id/tnombre"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ellipsize="end"
                android:inputType="textMultiLine"
                android:lines="1"
                android:textAppearance="@style/TextAppearance.AppCompat.Medium"
                android:textSize="12sp"
                android:textStyle="bold"></TextView>

            <TextView
                android:id="@+id/thorarios"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:textAppearance="@style/TextAppearance.AppCompat.Small"
                android:textColor="@color/colorPrimary"
                android:textSize="10sp"
                android:visibility="gone"></TextView>

        </LinearLayout>

If someone else have this issue, I fixed adding this line in the fragment class.如果其他人有这个问题,我修复了在片段 class 中添加这一行。

rlista.setHasFixedSize(true);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM