如何从Android复选框中获取值

8

我想获取复选框中所选项目的名称。但我只得到了一些字母数字组合。如何从复选框中获取所选项目的名称?

public View getView(int position, View convertView, ViewGroup parent) {
        View view = null;
        if (convertView == null) {
            LayoutInflater inflator = context.getLayoutInflater();
            view = inflator.inflate(R.layout.customlistlayout, null);
            final ViewHolder viewHolder = new ViewHolder();
            viewHolder.text = (TextView) view.findViewById(R.id.label);
            viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check);
            viewHolder.checkbox
                    .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

                        @Override
                        public void onCheckedChanged(CompoundButton buttonView,
                                boolean isChecked) {
                            Model element = (Model) viewHolder.checkbox
                                    .getTag();  

                            element.setSelected(buttonView.isChecked());


    enter code here

              //System.out.println(itemname);
                        }
                    });
            view.setTag(viewHolder);
            viewHolder.checkbox.setTag(list.get(position));
        } else {
            view = convertView;
            ((ViewHolder) view.getTag()).checkbox.setTag(list.get(position));
        }
        ViewHolder holder = (ViewHolder) view.getTag();
        holder.text.setText(list.get(position).getName());
        holder.checkbox.setChecked(list.get(position).isSelected());
        return view;
    }
5个回答

4
我得到了类似于这样的东西:
CheckBox not = (CheckBox)findViewById(R.id.checkBox1);
not.setChecked(my.notifications);
not.setOnClickListener(new OnClickListener() 
{

     @Override
     public void onClick(View v) 
     {
         if (((CheckBox) v).isChecked()) 
         {


         }
         else
         {

         }
     }
});

2
尝试这个示例代码..将其实现到你的代码中。
    public class Planets 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.listview);

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

  /** 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 );      
      CheckBox checkBox ; 
      TextView textView ;     

      if ( convertView == null ) {
        convertView = inflater.inflate(R.layout.simplerow, null);

        textView = (TextView) convertView.findViewById( R.id.rowTextView );
        checkBox = (CheckBox) convertView.findViewById( R.id.CheckBox01 );
        convertView.setTag( new PlanetViewHolder(textView,checkBox) );
        checkBox.setOnClickListener( new View.OnClickListener() {
          public void onClick(View v) {

            CheckBox cb = (CheckBox) v ;
            Planet planet = (Planet) cb.getTag();
            planet.setChecked( cb.isChecked() );

            if(cb.isChecked()){
                String s = planet.getName();
                System.out.println(s);
            }

          }
        });        
      }
     else {        
        PlanetViewHolder viewHolder = (PlanetViewHolder) convertView.getTag();
        checkBox = viewHolder.getCheckBox() ;
        textView = viewHolder.getTextView() ;
      }
      checkBox.setTag( planet ); 
      checkBox.setChecked( planet.isChecked() );
      textView.setText( planet.getName() );        
      return convertView;
    }
  }
  public Object onRetainNonConfigurationInstance() {
    return planets ;
  }
}

1

为复选框设置标签,就像您为复选框提供名称一样,还将其设置为该复选框的标签,然后您可以在setOnclickListener中访问该标签。

viewHolder.checkbox.setTag("Write here name");
viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
   @Override
   public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
   Model element = (Model) viewHolder.checkbox.getTag();  
   element.setSelected(buttonView.isChecked());
   Log.v("Checked Name",buttonview.getTag().toString());
 }
});

0

试一下这段代码:

String str = yourCheckbox.getText();

-1

如果你想知道哪个复选框被选中或取消选中,你可以为每个复选框注册一个新的监听器实例。

    CheckBox one = (CheckBox)findViewById(R.id.checkBox1);
one.setOnClickListener(new OnClickListener() 
{

     @Override
     public void onClick(View v) 
     {
        Log.d(TAG,"I am checkbox 1!");
     }
  });

    CheckBox two = (CheckBox)findViewById(R.id.checkBox2);
two.setOnClickListener(new OnClickListener() 
{

     @Override
     public void onClick(View v) 
     {
        Log.d(TAG,"I am checkbox 2!");
     }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接