如何显示水平Recyclerview-在显示水平项目时遇到问题

时间:2019-10-09 01:37:34

标签: java android xml android-recyclerview

我想在recyclerview中显示水平项目,但我已经尝试过但没有全部完成,只向我显示具有放大宽度的水平项目。

在Android Studio中根据需要显示

enter image description here

但是在运行时,以运动来表现

enter image description here

这些项目是自动换行的,但其他项目在我的上一个项目向右滚动后显示。

这是我的代码。

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>

还有我的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>

要加载的片段代码

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

还有我的dataAdapter类

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

在Android Studio中按我的意愿显示我。

但是在运行时中,我的移动设备中的项目全宽,但包裹了内容。enter image description here

3 个答案:

答案 0 :(得分:0)

我认为您只是在类适配器中添加notifyDataSetChanged

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

答案 1 :(得分:0)

在您的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>

答案 2 :(得分:0)

如果其他人有此问题,我已修复在片段类中添加此行。

rlista.setHasFixedSize(true);