【问题标题】:Android Get Checkbox Info from ListViewAndroid 从 ListView 获取复选框信息
【发布时间】:2016-12-06 00:34:25
【问题描述】:

我有一个带有多个复选框的 ListView(每个列表项一个)。创建包含来自选定复选框的信息的数组的最佳方法是什么。

例如,这是一个列表。

  Item 1 "Ham" Checked
  Item 2 "Turkey" NotChecked
  Item 3 "Bread" Checked  

我想创建一个包含“ham”和“turkey”的数组

【问题讨论】:

    标签: android checkbox


    【解决方案1】:

    如果你使用 ListView 的内置复选框方法和 setChoiceMode() 那么你只需要调用getCheckedItemIds()getCheckedItemPositions()

    public class Example extends Activity implements OnClickListener {
        ListView mListView;
        String[] array = new String[] {"Ham", "Turkey", "Bread"};
    
        @Override
        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, array);
    
            mListView = (ListView) findViewById(R.id.list);
            mListView.setAdapter(adapter);
            mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    
            Button button = (Button) findViewById(R.id.button);
            button.setOnClickListener(this);
        }
    
        public void onClick(View view) {
            SparseBooleanArray positions = mListView.getCheckedItemPositions();
            int size = positions.size();
            for(int index = 0; index < size; index++) {
                Log.v("Example", "Checked: " + array[positions.keyAt(index)]);
            }
        }
    }
    

    如果适配器绑定到游标,那么这变得更加实用。

    【讨论】:

      【解决方案2】:

      您可以创建一个 ArrayList,然后用户检查的任何项目都将它们添加到 arraylist。

      Below Snippet 完全符合您的要求。

      package com.windrealm.android;
      
      import java.util.ArrayList;
      import java.util.Arrays;
      import java.util.List;
      
      import android.app.Activity;
      import android.content.Context;
      import android.os.Bundle;
      import android.view.LayoutInflater;
      import android.view.View;
      import android.view.View.OnClickListener;
      import android.view.ViewGroup;
      import android.widget.AdapterView;
      import android.widget.ArrayAdapter;
      import android.widget.Button;
      import android.widget.CheckBox;
      import android.widget.ListView;
      import android.widget.TextView;
      import android.widget.Toast;
      
      public class PlanetsActivity extends Activity
      {
      
          private ListView mainListView;
          private Planet[] planets;
          private ArrayAdapter<Planet> listAdapter;
          private Button check;
          private Context context;
      
          /** Called when the activity is first created. */
          @Override
          public void onCreate(Bundle savedInstanceState)
          {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.main);
              context = PlanetsActivity.this;
              check = (Button) findViewById(R.id.check);
              // 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();
              if (planets == null)
              {
                  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") };
              }
              ArrayList<Planet> planetList = new ArrayList<Planet>();
              planetList.addAll(Arrays.asList(planets));
      
              // Set our custom array adapter as the ListView's adapter.
              listAdapter = new PlanetArrayAdapter(this, planetList);
              mainListView.setAdapter(listAdapter);
      
              check.setOnClickListener(new OnClickListener()
              {
      
                  @Override
                  public void onClick(View view)
                  {
                      for (int i = 0; i < listAdapter.getCount(); i++)
                      {
                          Planet planet = listAdapter.getItem(i);
                          if (planet.isChecked())
                          {
                                                  //Add this item in ArrayList
                              Toast.makeText(context,
                                      planet.getName() + " is Checked!!",
                                      Toast.LENGTH_SHORT).show();
                          }
                      }
      
                  }
              });
          }
      
          /** 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;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-28
        • 1970-01-01
        • 2015-07-07
        • 1970-01-01
        相关资源
        最近更新 更多