我有一个使用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" />
`
答案 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有三个不同的选项