Android中的水平recyclerview问题

时间:2020-01-24 07:20:05

标签: android android-recyclerview scroll

我正在用我的SQLite数据库中的所有记录的数据(一个记录在另一个记录下)填充Recycler View。我需要水平滚动“ Recycler View”,因为有些单词较大并且没有进入屏幕,就像您在下图中看到的那样:

enter image description here

这是我的RecyclerView布局,但仍然无法使用:

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

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/etIngresar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="Ingrese un verbo"
        android:inputType="textPersonName"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.08"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.023" />

    <Button
        android:id="@+id/bnMostrar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="mostrar"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.822"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.019" />
</android.support.constraint.ConstraintLayout>

<android.support.v7.widget.RecyclerView
    android:id="@+id/rvListItems"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginLeft="20dp"
    android:layout_marginTop="70dp"
    android:layout_marginRight="20dp"
    android:layout_marginBottom="70dp"
    android:scrollbarSize="4dp"
    android:scrollbars="horizontal"
    android:orientation="horizontal" />

</RelativeLayout>

我无法在“活动”中设置此项,因为它会转换滚动水平BUT,但会将所有记录都放在一行中,而且我不希望这样做。

    LinearLayoutManager manager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL,true);

赞:

enter image description here

已编辑

我的Recycler View课程:

public class RecyclerViewAdapter extends RecyclerView.Adapter {
private ArrayList<Items> listItem ;

public RecyclerViewAdapter(ArrayList<Items> listItem) {
    this.listItem = listItem;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View contentView = LayoutInflater.from(parent.getContext()).inflate(R.layout.lista, null);
    System.out.println("CREATE VIEW HOLDER: " + viewType);
    return new Holder(contentView);
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    Items item = listItem.get(position);
    Holder Holder = (Holder) holder;
    Holder.tvVerbo.setText(item.getVerbo());
    Holder.tvReferencia.setText(item.getReferencia());
    Holder.tvEu.setText(item.getEu());
    Holder.tvVoce.setText(item.getVoce());
    Holder.tvNos.setText(item.getNos());
    Holder.tvVoces.setText(item.getVoces());

    System.out.println("BIND VIEW HOLDER: " + position);
}

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

public class Holder extends RecyclerView.ViewHolder{
    TextView tvVerbo;
    TextView tvReferencia;
    TextView tvEu;
    TextView tvVoce;
    TextView tvNos;
    TextView tvVoces;

    public Holder(View itemView) {
        super(itemView);
        tvVerbo = itemView.findViewById(R.id.tvLista1);
        tvReferencia = itemView.findViewById(R.id.tvLista2);
        tvEu = itemView.findViewById(R.id.tvLista3);
        tvVoce = itemView.findViewById(R.id.tvLista4);
        tvNos = itemView.findViewById(R.id.tvLista5);
        tvVoces = itemView.findViewById(R.id.tvLista6);

    }
}
}

当我致电回收站时,我的活动Verbos2:

public class Verbos2 extends AppCompatActivity {

RecyclerView recyclerViewItem;
RecyclerViewAdapter recyclerViewVerbos;
EditText etVerbos;
Button mostrar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.verbos2);

    etVerbos = findViewById(R.id.etIngresar);
    mostrar = findViewById(R.id.bnMostrar);

    recyclerViewItem = findViewById(R.id.rvListItems);
    LinearLayoutManager manager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL,false);
    recyclerViewItem.setLayoutManager(manager);

    mostrar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            List<Items> completeList = new ArrayList<>();
            completeList.addAll(mostrarVerbos());
            recyclerViewVerbos = new RecyclerViewAdapter((ArrayList<Items>) completeList);
            recyclerViewItem.setAdapter(recyclerViewVerbos);
        }
    });
}

public List<Items> mostrarVerbos(){
    BaseDeDatos admin = new BaseDeDatos(getApplicationContext(), "verbos.db", getApplicationContext(), 11);
    SQLiteDatabase db = admin.getReadableDatabase();
    String[] parametros = {etVerbos.getText().toString()};
    Cursor cursor = db.rawQuery("SELECT * FROM verbos WHERE verbos =?", parametros);
    List<Items> verbos= new ArrayList<>();
    if(cursor.moveToFirst()){
        do {
            verbos.add(new Items(cursor.getString(1), " " + cursor.getString(2), " " + cursor.getString(3), " " + cursor.getString(4), " " + cursor.getString(5), " " + cursor.getString(6)));
        }while (cursor.moveToNext());
    }else{
        Toast.makeText(getApplicationContext(), "El verbo no existe", Toast.LENGTH_LONG).show();
    }
    return verbos;
}
}

列表xml:

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

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/tvLista1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="algo1"
        android:textSize="15sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/tvLista2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="algo 2"
        android:textSize="15sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/tvLista3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="algo 3"
        android:textSize="15sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/tvLista4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="algo 4"
        android:textSize="15sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/tvLista5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="algo 5"
        android:textSize="15sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/tvLista6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="algo 5"
        android:textSize="15sp"
        android:textStyle="bold" />

</LinearLayout>

</LinearLayout>

已编辑2

您可以看到,它生成了一个水平滚动到每个记录的滚动条。我只需要一个同时滚动所有记录的水平滚动条(在这种情况下为3条记录)

enter image description here

2 个答案:

答案 0 :(得分:0)

我不知道问题出在您的recyclerview。您必须在recyclerview的布局项目内的TextView上将multiline设置为true,以便文本可以跨越多行。

答案 1 :(得分:0)

尝试在项目布局内添加水平滚动视图,并将 maxLines 1 设置为项目textView。

尝试下面的代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fillViewport="true"
        android:overScrollMode="never">
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <TextView
                android:id="@+id/tvLista1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="algo1"
                android:maxLines="1"
                android:textSize="15sp"
                android:textStyle="bold" />
            <TextView
                android:id="@+id/tvLista2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="algo 2"
                android:maxLines="1"
                android:textSize="15sp"
                android:textStyle="bold" />
            <TextView
                android:id="@+id/tvLista3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="algo 3"
                android:maxLines="1"
                android:textSize="15sp"
                android:textStyle="bold" />
            <TextView
                android:id="@+id/tvLista4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="algo 4"
                android:maxLines="1"
                android:textSize="15sp"
                android:textStyle="bold" />
            <TextView
                android:id="@+id/tvLista5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="algo 5"
                android:maxLines="1"
                android:textSize="15sp"
                android:textStyle="bold" />
            <TextView
                android:id="@+id/tvLista6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="algo 5"
                android:maxLines="1"
                android:textSize="15sp"
                android:textStyle="bold" />
        </LinearLayout>
    </HorizontalScrollView>
</LinearLayout>

希望这对您有帮助!

谢谢。