Android如何通过按钮显示/隐藏所有复选框,并长按CustomAdapter

时间:2017-12-05 17:38:56

标签: android checkbox android-arrayadapter android-adapter simplecursoradapter

当我按住某个项目或单击按钮时,我希望这样做,ListView中的所有CheckBox显示/隐藏,具体取决于它现在的情况。我有一个CustomAdapter在数组列表中我的CustomAdapter

public class MyCustomCursorAdapter extends CursorAdapter {

private Context mContext;
private String[] mColumns;
private int[] mViews;
private int mLayout;
private boolean[] mCheckBoxStates;
private int mCheckBoxView;
protected int mCountCheckBox;
private CheckBox checkbox1;

// Constructor for the Custom Cursor Adapter
MyCustomCursorAdapter(Context context, int layout, Cursor csr, String[] 
 from_columns, int[] to_views, int checkbox_view) {
    super(context, csr, false);
    mContext = context;
    mLayout = layout;
    mColumns = from_columns;
    mViews = to_views;
    mCheckBoxView = checkbox_view;
}

@Override
// Inflate the layout we are going to use (as passed via 2nd parameter)
public View newView(Context context, Cursor csr, ViewGroup parent) {
    // Initialise an int array for the checkboxes (all will be 0)
    mCheckBoxStates = new boolean[csr.getCount()];
    mCountCheckBox = csr.getCount();
    return LayoutInflater.from(context).inflate(mLayout, parent, false);
}

     @Override
   // Tie the from_columns to the display views
    public void bindView(View view, Context context, Cursor csr) {

    final Cursor fcsr = csr;

    // Place the data from the cursor into the respective View (TextView)
    for (int i = 0; i < mColumns.length; i++) {


  ((TextView)view.findViewById(mViews[i])).setText(csr.getString
  (csr.getColumnIndex
  (mColumns[
  i])));
    }
    // Set the checkbox (note should be false, unless otherwise changed)
    CheckBox currentCheckBox = (CheckBox) view.findViewById(mCheckBoxView);
    currentCheckBox.setChecked(mCheckBoxStates[csr.getPosition()]);
    currentCheckBox.setTag(new 
 Long(csr.getLong(csr.getColumnIndex(DatabaseHandler.KEY_ID))));

    //
    currentCheckBox.setOnCheckedChangeListener(new 
 CompoundButton.OnCheckedChangeListener() {
        final int position = fcsr.getPosition();

        @Override
          public void onCheckedChanged(CompoundButton buttonView, boolean 
       isChecked) {
            // Store the checkbox status
            mCheckBoxStates[position] = ((CheckBox) buttonView).isChecked();
            int restore_cursor_position = fcsr.getPosition();
            //Move the Cursor to the respective row
            //NOTE! 1st position in Lisview is 1 but equates to cursor row 0 
etc hence -1
             fcsr.moveToPosition(position);
            Toast.makeText(mContext,
                    "You Changed the CheckBox for row " +
                            Integer.toString(position + 1) +
                            " Item is " +

fcsr.getString(fcsr.getColumnIndex(DatabaseHandler.KEY_ITEM))
                    ,
                    Toast.LENGTH_SHORT
            ).show();
            //restore the Cursor's position
            fcsr.moveToPosition(restore_cursor_position);
        }
    });
}

// get the list of items (the ID's as long) that have been checked.
public long[] getCheckedRecordIdList() {

    Cursor csr = this.getCursor();

    // using ArrayList as we can add as we don't yet know how many
    ArrayList<Long> rva = new ArrayList<>();
    // Just in case save the current position of the Cursor
    int restore_cursor_position = csr.getPosition();
    // Loop through the checkbox states
    for (int i = 0; i < mCheckBoxStates.length; i++) {
        // If the checkbox reflected as being checked then handle, else 
ignore it
        if (mCheckBoxStates[i]) {
            // Move to the respective cursor row
            csr.moveToPosition(i);
            // get the respective ID and store in the arraylist
            rva.add(csr.getLong(csr.getColumnIndex(DatabaseHandler.KEY_ID)));
        }
    }
    // Done with the Cursor so re-position it
    csr.moveToPosition(restore_cursor_position);

    // Create the long array to be returned
    long[] rv = new long[rva.size()];
    // Populate the long array with the id's from the arraylist
    for (int i = 0; i < rva.size(); i++) {
        rv[i] = rva.get(i);
    }
    // return the long[]
    return rv;
}

}

顺便说一下,当我单击Repeat按钮时,我将如何刷新TextView(正常,不在数组中,在上一个Activity中找到)

0 个答案:

没有答案