从android中的列表中的复选框中检索所选数据

时间:2012-09-27 10:29:19

标签: android android-layout android-listview android-checkbox

如何从复选框列表中检索所选数据?

我已经制作了一个列表并在列表中放了checkbox,现在我想从中检索所选数据。 我怎么能这样做?

这是我的示例代码

public class PlanetsActivity extends Activity {

  private ListView mainListView;
  private Planet[] planets;
  private ArrayAdapter<Planet> listAdapter;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ContentResolver cr = getContentResolver();
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
        null, null, null);

    // Find the ListView resource.
    mainListView = (ListView) findViewById(R.id.mainListView);

    // When item is tapped, toggle checked properties of CheckBox and
    // Planet.
    mainListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
      @Override
      public void onItemClick(AdapterView<?> parent, View item,
        int position, long id) {
        Planet planet = listAdapter.getItem(position);
        planet.toggleChecked();
        PlanetViewHolder viewHolder = (PlanetViewHolder) item.getTag();
        viewHolder.getCheckBox().setChecked(planet.isChecked());
      }
    });

    // Create and populate planets.
    planets = (Planet[]) getLastNonConfigurationInstance();
    // planets = new Planet[10];
    // planets.Add("asdf");
    ArrayList<Planet> planetList = new ArrayList<Planet>();

    if (planets == null) {
      if (cur.getCount() > 0) {
        planets = new Planet[cur.getCount()] ;
        int i=0;
        while (cur.moveToNext()) {
          String id = cur.getString(cur
            .getColumnIndex(ContactsContract.Contacts._ID));
          String name = cur.getString(cur
            .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

          //Toast.makeText(getApplicationContext(), name,
          //Toast.LENGTH_LONG).show();

          planets = new Planet[] { new Planet(name) };
          planetList.addAll(Arrays.asList(planets));

          //planets[i].setName(name);
          //planets[i].setChecked(false)

          if(Integer.
            parseInt(cur
              .getString(cur
              .getColumnIndex(ContactsContract
              .Contacts.HAS_PHONE_NUMBER))) > 0) {
                  // Query phone here. Covered next
          }
          i++;
        }
      }

      // planets = new Planet[] { new Planet("Mercury"),
      // new Planet("Venus"), new Planet("Earth"),
      // new Planet("Mars"), new Planet("Jupiter"),
      // new Planet("Saturn"), new Planet("Uranus"),
      // new Planet("Neptune"), new Planet("Ceres"),
      // new Planet("Pluto"), new Planet("Haumea"),
      // new Planet("Makemake"), new Planet("Eris") };
    }


    // Set our custom array adapter as the ListView's adapter.
    listAdapter = new PlanetArrayAdapter(this, planetList);
    mainListView.setAdapter(listAdapter);
}

/** Holds planet data. */
private static class Planet {
  private String name = "";
  private boolean checked = false;
  public Planet() {}

  public Planet(String name) {
    this.name = name;
  }

  public Planet(String name, boolean checked) {
    this.name = name;
    this.checked = checked;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public boolean isChecked() {
    return checked;
  }

  public void setChecked(boolean checked) {
    this.checked = checked;
  }

  public String toString() {
    return name;
  }

  public void toggleChecked() {
    checked = !checked;
  }
}

/** Holds child views for one row. */
private static class PlanetViewHolder {
    private CheckBox checkBox;
    private TextView textView;

    public PlanetViewHolder() {
    }

    public PlanetViewHolder(TextView textView, CheckBox checkBox) {
        this.checkBox = checkBox;
        this.textView = textView;
    }

    public CheckBox getCheckBox() {
        return checkBox;
    }

    public void setCheckBox(CheckBox checkBox) {
        this.checkBox = checkBox;
    }

    public TextView getTextView() {
        return textView;
    }

    public void setTextView(TextView textView) {
        this.textView = textView;
    }
}

/** Custom adapter for displaying an array of Planet objects. */
private static class PlanetArrayAdapter extends ArrayAdapter<Planet> {

    private LayoutInflater inflater;

    public PlanetArrayAdapter(Context context, List<Planet> planetList) {
        super(context, R.layout.simplerow, R.id.rowTextView, planetList);
        // Cache the LayoutInflate to avoid asking for a new one each time.
        inflater = LayoutInflater.from(context);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // Planet to display
        Planet planet = (Planet) this.getItem(position);

        // The child views in each row.
        CheckBox checkBox;
        TextView textView;

        // Create a new row view
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.simplerow, null);

            // Find the child views.
            textView = (TextView) convertView
                    .findViewById(R.id.rowTextView);
            checkBox = (CheckBox) convertView.findViewById(R.id.CheckBox01);

            // Optimization: Tag the row with it's child views, so we don't
            // have to
            // call findViewById() later when we reuse the row.
            convertView.setTag(new PlanetViewHolder(textView, checkBox));

            // If CheckBox is toggled, update the planet it is tagged with.
            checkBox.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    CheckBox cb = (CheckBox) v;
                    Planet planet = (Planet) cb.getTag();
                    planet.setChecked(cb.isChecked());
                }
            });
        }
        // Reuse existing row view
        else {
            // Because we use a ViewHolder, we avoid having to call
            // findViewById().
            PlanetViewHolder viewHolder = (PlanetViewHolder) convertView
                    .getTag();
            checkBox = viewHolder.getCheckBox();
            textView = viewHolder.getTextView();
        }

        // Tag the CheckBox with the Planet it is displaying, so that we can
        // access the planet in onClick() when the CheckBox is toggled.
        checkBox.setTag(planet);

        // Display planet data
        checkBox.setChecked(planet.isChecked());
        textView.setText(planet.getName());

        return convertView;
    }

}

public Object onRetainNonConfigurationInstance() {
    return planets;
}
}  

我想将所选数据发送到下一个活动

1 个答案:

答案 0 :(得分:0)

你只需要在你的意图中传递你的行星数组,阵列上的每个bean都有一个选定的状态!但是,要做到这一点,之前,Planet对象需要实现Parcelable。