0

我正在使用自定义列表适配器来显示带有复选框、文本和日期的列表,就像这样。

[复选框] - [文本视图] - [日期]

我正在从数据库中填充列表,但现在我想要的是,如果我检查一个列表项,那么它已完成并从列表视图中淡出,数据库中的状态也应该使用更新集查询为真,但我不想从数据库中删除它. 如何设置未选中项目的列表。

我的自定义适配器:

 public class CustomAdapter extends ArrayAdapter<Task> {

    private List<Task> dataitem;
    private Activity activity;

public CustomAdapter(Activity a, int textViewResourceId, List<Task> items) {
    super(a, textViewResourceId, items);
    this.dataitem = items;
    this.activity = a;
}

public static class ViewHolder{
    public TextView tasklistTitle;
    public TextView createdDate;
    public CheckBox completedflag;
}

   @Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    ViewHolder holder;
    if (v == null) {
        LayoutInflater vi =
            (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.tasklist_row, null);
        holder = new ViewHolder();
        holder.tasklistTitle = (TextView) v.findViewById(R.id.tasklistTitle);
        holder.createdDate = (TextView) v.findViewById(R.id.createdDate);
        holder.completedflag = (CheckBox) v.findViewById(R.id.completedflag);
        v.setTag(holder);
    }
    else
        holder=(ViewHolder)v.getTag();

    final Task custom = dataitem.get(position);
    if (custom != null) {
        holder.tasklistTitle.setText(custom.getTaskListTitle());
        holder.createdDate.setText(custom.getTaskListCreated());
        holder.completedflag.setText(custom.getTaskListCompletedFlag());
    }
    return v;
}
   public synchronized void refresAdapter(List<Task> dataitems) {
    dataitem.clear();
    dataitem.addAll(dataitems);
    notifyDataSetChanged();
   }
}

是否需要在此类中使用 OncheckedCheckedListner ?我已经经历了几个例子,但没有用。请帮忙。谢谢

4

1 回答 1

0
  1. 声明一个 int mStoreCheckedPosition = -1; // 保存当前选中的位置
  2. 您在每个项目上为 Checkbox 设置标签是它的位置(在 getView() 函数上,holder.completedflag.setTag(position))
  3. 您使用 OncheckedChecngeListner 来确定选中的复选框:if(checked == true)。并按照指南:

    if(mStoreCheckedPosition != -1){ 
         // updateView 
         int oldCheckedPosition = mStoreCheckedPosition - listView.getFirstVisiblePosition(); 
         View child = listView.getChildAt(oldCheckedPosition); // Get holder and setChecked for checked is false
         if(child!=null){
             ((ViewHolder)child.getTag()).completedflag.setChecked(false);
         }
    
    }
    // update database
    int currentCheckedPosition = (Integer)view.getTag();
    // Update database with the currentCheckedPosition is true value and mStoreCheckedPosition is false value
    // finally update mStoreCheckedPosition
    mStoreCheckedPosition = currentCheckedPosition;
    

我建议您在列表适配器中为 getItemId 返回 databaseId,然后使用它来更新您的数据库

于 2013-08-16T09:12:15.927 回答