【问题标题】:Hide or show CheckBox in CustomAdapter在 CustomAdapter 中隐藏或显示 CheckBox
【发布时间】:2017-05-22 13:40:42
【问题描述】:

我在我的应用程序中使用数据库。我可以创建一些“笔记”,并定义类型:作业或测试。

然后我将它显示在 ListView 中。 但是,当创建行时,我想检查我是否选择了“家庭作业”作为类型,如果选择了,我会在我的 listView 中为该行添加一个复选框,但是如果我选择了“测试”,我会这样做不显示复选框。

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

我该怎么做?

这是我的 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);

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

}

谢谢你们!

【问题讨论】:

  • 您必须添加条件以检查当前位置数据是否为作业或测试作业是否将复选框的可见性设置为可见,否则设置为 GONE/INVISIBLE
  • 我该怎么做?
  • 从光标中获取您需要检查的列,然后...检查它。如果您不熟悉它,请查看 higherpass.com/android/tutorials/… 或只是谷歌它有很多 tuts。
  • 您的光标是否包含任何可以区分是作业还是测试的值?
  • 是的,在我的光标中我有很多值,但其中之一是检查它是作业还是测试

标签: android listview checkbox custom-adapter


【解决方案1】:

你必须在 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);
    }

    }

【讨论】:

  • 你能检查我的问题吗?我已经用我所做的更新了它,这对我来说似乎是正确的,但你能确认一下吗?另外,我数据库中的第 3 行是 Homework,第 4 行是 Test
  • 根据您的编辑,我可以看到作业和测试的两个差异值,如果作业和测试可以同时进行,有什么可能性?
  • 好吧,当我创建一个笔记时,我会检查选择了哪个 RadioButton。被选中的人在我的数据库行中获得值 1。另一个得了0。所以我不能同时做作业和考试
  • 根据您的注释检查已编辑的答案会有任何一个,因此您可以在答案中添加条件
  • 好的,它的工作!是的,如果我写的第二个有点没用,谢谢!
【解决方案2】:

你的情况不正常。在您的适配器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);
}

【讨论】:

  • 好的,谢谢您的建议!我改变了我的代码!
【解决方案3】:

步骤

  1. 在 XML 行中使复选框被隐藏

android:visibility="gone"

  1. 在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
        }
    });
    
    
    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
        }
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多