【问题标题】:How show a Horizontal Recyclerview - have trouble showing horizontal items如何显示水平 Recyclerview - 无法显示水平项目
【发布时间】:2019-10-09 01:37:34
【问题描述】:

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

在 Android Studio 中随心所欲地展示

但在我的电影运行时,给我看

这些项目是宽度换行的,但其他项目出现在我之前的项目向右滚动后。

这是我的代码。

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

【问题讨论】:

    标签: java android xml android-recyclerview


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        如果其他人有这个问题,我修复了在片段类中添加这一行。

        rlista.setHasFixedSize(true);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-18
          • 1970-01-01
          • 2021-01-07
          • 2013-07-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多