如果复选框不存在,请删除复选框的空格

时间:2017-06-06 05:54:43

标签: android listview checkbox

我有一个使用CustomAdapter填充的listView。

我从db中检索值时进行测试。

如果是'家庭作业',其中一行。如果homework = 1,那么我在listView的行的开头显示一个CheckBox。但如果它是0,我什么都不显示。但我想将复选框后的所有文本移到左侧。在我的list_row.xml中我声明了一个复选框,所以如果homework为0,我只需将复选框设置为INVISIBLE。

我无法发布图片,所以我举一个例子:

如果作业是1,我的listView是这样的:

Checkbox - Date of creation - Title

如果Homework为0,我的listview行就像这样:

         - Date of creation - Title

所以你可以看到,如果Homework为0,那么会有一个空的空间。我怎么能改变它,所以它保持这样:

-Date of creation - Title

谢谢!请告诉我您是否需要我的CustomAdapter代码

@ UPDATE-my customadapter

`public class CustomAdapterJalons extends SimpleCursorAdapter {

private Context mContext;
private Context appContext;
private int layout;
private Cursor cr;
private final LayoutInflater inflater;

public CustomAdapterJalons(Context context, int layout, Cursor c, String[] from, int[] to) {
    super(context, layout, c, from, to);
    this.layout = layout;
    this.mContext = context;
    this.inflater = LayoutInflater.from(context);
    this.cr = c;
}



@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    return inflater.inflate(layout, null);
}

@Override
public void bindView(View view, final Context context, final Cursor cursor) {
    super.bindView(view, context, cursor);

    final int position = cursor.getPosition();

    cursor.moveToPosition(position);

    int devoir = cursor.getInt(3);
    int evaluation = cursor.getInt(4);
    int importance = cursor.getInt(5);
    int fait = cursor.getInt(10);
    final CheckBox cbdevoir = (CheckBox) view.findViewById(R.id.CBDevoir);
    final TextView couleur = (TextView)view.findViewById(R.id.TVCouleurImportance);

    if(importance==0)
    {
        couleur.setBackgroundColor(Color.parseColor("#ff8080"));
    }
    if(importance==1)
    {
        couleur.setBackgroundColor(Color.parseColor("#ff0000"));
    }
    if(importance==2)
    {
        couleur.setBackgroundColor(Color.parseColor("#4d0000"));
    }

    if (fait == 1) {
        cbdevoir.setChecked(true);
    } else {
        cbdevoir.setChecked(false);
    }


    cbdevoir.setVisibility(devoir ==1? View.VISIBLE: View.GONE);`

我的list_row.xml:

`<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:id="@+id/item_root"
android:weightSum="1">

<CheckBox
    android:id="@+id/CBDevoir"
    android:layout_width="30dp"
    android:layout_height="20dp"
    android:layout_marginLeft="1dp"
    android:layout_marginTop="-1dp"
    android:checked="false"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:id="@+id/text_branche_cours"
    android:layout_width="75dp"
    android:layout_height="16dp"
    android:layout_marginLeft="32dp"
    android:layout_marginTop="2dp"
    android:text="English"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:id="@+id/text_trait"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text=" - "
    app:layout_constraintTop_toTopOf="parent"
    android:layout_marginTop="-1dp"
    android:layout_marginLeft="106dp"
    app:layout_constraintLeft_toLeftOf="parent" />

<TextView
    android:id="@+id/text_designation"
    android:layout_width="150dp"
    android:layout_height="18dp"
    android:layout_marginLeft="122dp"
    android:layout_marginTop="2dp"
    android:ellipsize="end"
    android:maxLines="1"
    android:text="Reading"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:id="@+id/TVCouleurImportance"
    android:layout_width="25dp"
    android:layout_height="wrap_content"
    android:layout_marginLeft="281dp"
    android:layout_marginTop="-1dp"
    android:layout_weight="1"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

`

4 个答案:

答案 0 :(得分:0)

根据您使用的视图类型,您始终可以从布局中删除视图。

例如,您可以采用线性布局并调用.removeView(View)来完全删除复选框,而不是仅使其不可见。请记住,如果您要回收视图,那么您将需要一种方法将其添加回来!

我推荐使用视图模式  https://developer.android.com/training/improving-layouts/smooth-scrolling.html

答案 1 :(得分:0)

使用setVisibility(View.GONE)

当您将视图设置为已消失时,它不会为该布局占用任何空间,同时将其设置为不可见。

答案 2 :(得分:0)

如果将视图的可见性设置为不可见,它将变为不可见但占据使用它的空间,因此设置可见性ot去释放视图占用的空间。使用适配器的getview方法中的代码行< BR />

  if(devor==1){
     if (fait == 1) {
        cbdevoir.setChecked(true);
    } else {
        cbdevoir.setChecked(false);
    }
     }else{
cbdevoir.setVisibility(View.GONE);
}

答案 3 :(得分:0)

你必须做这样的事情

element(..., 0)

setVisibility有三个不同的选项

  1. View.VISIBLE - 如果屏幕上的视图消失,则显示该视图
  2. 查看.GONE - 这会隐藏视图,而您的其他内容将取代此视图
  3. View.INVISIBLE - 这会隐藏视图,但其他视图不会取代此视图(意味着空间仍然保留在该视图中)