在 CustomAdapter 中隐藏或显示 CheckBox

Hide or show CheckBox in CustomAdapter

我在我的应用程序中使用数据库。我可以创建一些 "notes" ,并定义类型:家庭作业或测试。

然后我将它显示在 ListView 中。 但是,当创建该行时,我想检查我是否选择 "Homework" 作为类型,如果我选择了,我会在我的 listView 中的该行添加一个复选框,但如果我选择 "Test", 我不显示复选框。

然后,使用复选框,我可以使用 cb.isChecked() 将作业设置为完成或未完成。但首先,如果它是家庭作业,我必须只显示复选框。但是不知道怎么查..

我该怎么做?

这是我的 CustomAdapter class

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);

    LinearLayout root_view = (LinearLayout)view.findViewById(R.id.item_root);

    root_view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            //method
        }
    });

   final int position = cursor.getPosition();

    cursor.moveToPosition(position);

    int devoir = cursor.getInt(3);
    int evaluation = cursor.getInt(4);
    CheckBox cbdevoir = (CheckBox)view.findViewById(R.id.CBDevoir);


    if(devoir==1)
    {
     cbdevoir.setVisibility(View.VISIBLE);
    }
   if(evaluation==1)
   {
       cbdevoir.setVisibility(View.INVISIBLE);
   }
    }

}

谢谢大家!

你必须在 bindview 方法中检查一下

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

    LinearLayout root_view = (LinearLayout)view.findViewById(R.id.item_root);

    root_view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            //method
        }
    });

   final int position = cursor.getPosition();

    cursor.moveToPosition(position);

    int devoir = cursor.getInt(3);
    int evaluation = cursor.getInt(4);
    CheckBox cbdevoir = (CheckBox)view.findViewById(R.id.CBDevoir);


    if(devoir==1)
    {
     cbdevoir.setVisibility(View.VISIBLE);
    }
    else{
    cbdevoir.setVisibility(View.INVISIBLE);
    }

    }

步骤

  1. 在 XML 行中隐藏复选框

android:能见度="gone"

  1. 绑定视图方法

    @Override
    
        public void bindView(View view, final Context context, final Cursor cursor) {
    
    
            super.bindView(view, context, cursor);
    
        LinearLayout root_view=LinearLayout)view.findViewById(R.id.item_root);
    
    root_view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
    
            //method
        }
    });
    
    
    CheckBox cbdevoir = (CheckBox)view.findViewById(R.id.CBDevoir);
    
    If(type.equals("Homework"){
    
      cbdevoir.setVisibility(View.VISIBLE)
     }
    else{
    
        cbdevoir.setVisibility(View.GONE);
    }
    
    
    if(cbdevoir.isChecked())
    {
        //method to set the homework done
    }
    else
        {
            //method to set the homework undone
        }
    }
    

你的情况不对。在您的适配器 bindView() 方法中:

使用:

if(devoir == 1) {
    cbdevoir.setVisibility(View.VISIBLE);
} else {
    cbdevoir.setVisibility(View.GONE);
}

而不是:

if(devoir==1)
{
    cbdevoir.setVisibility(View.VISIBLE);
}
if(evaluation==1)
{
    cbdevoir.setVisibility(View.INVISIBLE);
}