有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从RecyclerView中的ViewHolder中删除小部件

我想制作一个应用程序来跟踪我的支出。 我有一个数据库和一个名为categories的表。在这个表中,我保存了category_id(int)、category_name(varchar)、limit_week(int)、limit_month(int)。如果我不想有限制,它们可以是空的。添加类别非常有效

现在我想在RecyclerView中显示类别。项目的布局如下所示:

<安卓x.cardview.widget.CardView 安卓:layout_height="wrap_content"
安卓:layout_width="match_parent"
xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
xmlns:app="http://schemas.安卓.com/apk/res-auto"
app:cardCornerRadius="@dimen/card_corner_radius"
app:cardBackgroundColor="@color/card_color"
app:contentPadding="@dimen/card_content_padding"
app:cardElevation="@dimen/card_elevation"
安卓:layout_margin="@dimen/card_margin">

<安卓x.constraintlayout.widget.ConstraintLayout
    安卓:orientation="vertical"
    安卓:layout_width="match_parent"
    安卓:layout_height="wrap_content">

    <TextView
        安卓:id="@+id/tvCat"
        安卓:layout_width="match_parent"
        安卓:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        安卓:id="@+id/tvLimWeek"
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        安卓:text="@string/weekly_limit"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tvCat" />

    <TextView
        安卓:id="@+id/tvLimMonth"
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        安卓:text="@string/monthly_limit"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tvLimWeek" />

    <TextView
        安卓:id="@+id/tvLimWeekEnter"
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        app:layout_constraintStart_toEndOf="@id/tvLimMonth"
        app:layout_constraintTop_toTopOf="@id/tvLimWeek"
        安卓:layout_marginLeft="@dimen/margin_16sp"
        安卓:layout_marginStart="@dimen/margin_16sp" />
    <TextView
        安卓:id="@+id/tvLimMonthEnter"
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        app:layout_constraintStart_toEndOf="@id/tvLimMonth"
        app:layout_constraintTop_toTopOf="@id/tvLimMonth"
        安卓:layout_marginLeft="@dimen/margin_16sp"
        安卓:layout_marginStart="@dimen/margin_16sp" />

    <ProgressBar
        安卓:id="@+id/progressBarWeek"
        style="?安卓:attr/progressBarStyleHorizontal"
        安卓:layout_width="0dp"
        安卓:layout_height="wrap_content"
        安卓:layout_marginStart="8dp"
        安卓:layout_marginLeft="8dp"
        安卓:layout_marginEnd="8dp"
        安卓:layout_marginRight="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/tvLimWeekEnter"
        app:layout_constraintTop_toTopOf="@+id/tvLimWeekEnter"
        安卓:max="100"/>

    <ProgressBar
        安卓:id="@+id/progressBarMonth"
        style="?安卓:attr/progressBarStyleHorizontal"
        安卓:layout_width="0dp"
        安卓:layout_height="wrap_content"
        安卓:layout_marginStart="8dp"
        安卓:layout_marginLeft="8dp"
        安卓:layout_marginTop="8dp"
        安卓:layout_marginEnd="8dp"
        安卓:layout_marginRight="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/tvLimMonthEnter"
        app:layout_constraintTop_toTopOf="@+id/tvLimMonth"
        安卓:max="100"/>

</安卓x.constraintlayout.widget.ConstraintLayout>

我只想在有限制时显示进度条,否则我想删除它们。这是我的RecyclerView适配器:

class CategoryAdapter(private val mCats: List<Category>, private val context: Context): RecyclerView.Adapter<CategoryViewHolder>(){
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CategoryViewHolder {
    return CategoryViewHolder(LayoutInflater.from(context).inflate(R.layout.categories_view, parent, false))
}

override fun getItemCount() = mCats.size

override fun onBindViewHolder(holder: CategoryViewHolder, position: Int) {
    val cat: Category = mCats[position]
    holder.tvCat.text = cat.cat_name
    if(cat.limit_week != null)
        holder.tvLimitWeekEnter.text = cat.limit_week.toString()
    else {
        holder.tvLimitWeek.height = 0
        holder.tvLimitWeekEnter.height = 0
    }
    if(cat.limit_month != null)
        holder.tvLimitMonthEnter.text = cat.limit_month.toString()
    else {
        holder.tvLimitMonth.height = 0
        holder.tvLimitMonthEnter.height = 0
    }
}

}

我不知道是否可以删除文本视图,所以我只是将高度设置为0。但是现在我需要移除进度条,在那里我不能改变高度。那么有没有办法去除它们呢


共 (2) 个答案

  1. # 1 楼答案

    您可以在进度条上使用setVisibility(View.GONE)使其不可见,并且不占用任何空间来进行布局

  2. # 2 楼答案

    您可以更改进度栏上的可见性