2012-07-06 40 views
0

我是新的android.i做一個簡單的數學應用程序。 我使用的選擇權選項,但問題的複選框是這裏的答案選項不只有一個,而且二,三方式多選擇,所以我使用複選框如何處理複選框在android中的缺陷和unchecked事件

chkOption.setOnCheckedChangeListener(this); 

事件,並加以處理this.and將選擇值存儲在一個Arraylist.but當我選擇選項的值是在arrayList中添加,但是當我做取消選擇(Diselect),然後事件發生,並在ArrayList中的值添加。 我的代碼如下

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
    { 
     CheckBox chk=(CheckBox) buttonView; 
     if(chk.isChecked()) 
     { 
      forMetchCheckBox.add(String.valueOf(chk.getText()));    
     } 
    } 

forMetchCheckbow是我的字符串ArrayList的。所以我可以做什麼? 如何處理這個問題。 如果有任何用戶取消選擇該選項,那麼複選框選擇值將從ArrayList.it中移除?

+0

多少複選框你有? – 2012-07-06 08:02:26

回答

6

似乎你有一個以上的複選框,並要爲每一個複選框,設置全局監聽器。所以,在這種情況下,您還需要確定特定複選框的事件。

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
    { 
     int id = buttonView.getId(); 
     if(id == R.id.chk) 
     { 
      if(chk.isChecked()){ 
       forMetchCheckBox.add(String.valueOf(chk.getText())); 
      } 
      else{ 
       forMetchCheckBox.remove(String.valueOf(chk.getText())); 
      } 
     } 
     else if(id == R.id.chk1){ 
      .... 
     } 
    } 

等,這將使您的聽衆工作完美。

+0

是的,我也使用此代碼,但我的問題是如何刪除選擇複選框取消選擇(未選中)後arraylist添加項目 – 2012-07-06 08:09:18

+0

我編輯我的答案。 – 2012-07-06 08:10:13

0

你的if條件有什麼問題。它應該是:

if(isChecked) 

,而不是

if(chk.isChecked()) 
+0

我編輯我的答案..isChecked是函數參數。我寫了一個錯誤。 – 2012-07-06 08:01:57

+0

但取消選擇(未選中)scheck框後如何刪除添加項目。 – 2012-07-06 08:04:51

1
chk.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       // TODO Auto-generated method stub 

         if(isChecked){ 
          chetimeslot = (String)chk.getTag(); 
          checkbox_timeslot.add(chetimeslot); 

         } 
         else{ 
          chetimeslot = (String)chk.getTag(); 
          checkbox_timeslot.remove(chetimeslot); 


         } 

}); 
1

要一次選擇最多5複選框或計數的自定義列表視圖中選中和未選中複選框使用複選框

 package com.test; 

import java.util.ArrayList; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.ListActivity; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.KeyEvent; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.View.OnClickListener; 
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; 
import android.widget.AdapterView.OnItemClickListener; 


public class ListViewCheckboxesActivity extends ListActivity { 

    AlertDialog alertdialog = null; 
    int i1, i2, i3 = 0; 
    Country rowcheck; 
    MyCustomAdapter dataAdapter = null; 
    ListView listView = null; 
    int k = 1; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.fmain); 

     // Generate list View from ArrayList 
     displayListView(); 
     checkButtonClick(); 

    } 

    private void displayListView() { 

     // Array list of countries Equipments 
     ArrayList<Country> rowcheckList = new ArrayList<Country>(); 
     Country rowcheck = new Country("", "Hex Bolts", false); 
     rowcheckList.add(rowcheck); 
     rowcheck = new Country("", "Hex Cap Screw", false); 
     rowcheckList.add(rowcheck); 
     rowcheck = new Country("", "Round Head Bolt", false); 
     rowcheckList.add(rowcheck); 
     rowcheck = new Country("", "Slotted Head Hex Bolt", false); 
     rowcheckList.add(rowcheck); 
     rowcheck = new Country("", "Socket Cap Screw", false); 
     rowcheckList.add(rowcheck); 
     rowcheck = new Country("", "Sockets", false); 
     rowcheckList.add(rowcheck); 
     rowcheck = new Country("", "Square Head Bolt", false); 
     rowcheckList.add(rowcheck); 
     rowcheck = new Country("", "Carriage Bolt", false); 
     rowcheckList.add(rowcheck); 
     rowcheck = new Country("", "Plow Bolt", false); 
     rowcheckList.add(rowcheck); 

     rowcheck = new Country("", "Struts Clamp", false); 
     rowcheckList.add(rowcheck); 

     listView = getListView(); 

     dataAdapter = new MyCustomAdapter(this, R.layout.rowcheck_info, 
       rowcheckList); 

     // Assign adapter to ListView 
     listView.setAdapter(dataAdapter); 

     listView.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView parent, View view, 
        int position, long id) { 
       // When clicked, show a toast with the TextView text 
       Country rowcheck = (Country) parent.getItemAtPosition(position); 

      } 

     }); 

    } 

    private class MyCustomAdapter extends ArrayAdapter<Country> { 
     private ArrayList<Country> rowcheckList; 

     public MyCustomAdapter(Context context, int textViewResourceId, 
       ArrayList<Country> rowcheckList) { 
      super(context, textViewResourceId, rowcheckList); 
      this.rowcheckList = new ArrayList<Country>(); 
      this.rowcheckList.addAll(rowcheckList); 
     } 

     private class ViewHolder { 
      TextView code; 
      CheckBox name; 
     } 

     @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder holder = null; 
    Log.v("ConvertView", String.valueOf(position)); 

    if (convertView == null) 
    { 
    LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    convertView = vi.inflate(R.layout.rowcheck_info, null); 

    holder = new ViewHolder(); 
    holder.code = (TextView) convertView.findViewById(R.id.code); 
    holder.name = (CheckBox) convertView.findViewById(R.id.checkBox1); 
    convertView.setTag(holder); 

    holder.name.setOnClickListener(new View.OnClickListener() 
    { 
    public void onClick(View v) 
    { 
     CheckBox cb = (CheckBox) v ; 
     Country rowcheck = (Country) cb.getTag(); 

     //To check maximum 5 Selection 
     if(k>5) 
     { 

      if(!cb.isChecked()) 
      { 


        rowcheck.selected=true; 
        System.out.println(k--); 


      } 

      else 
      { 
       System.out.println("if block in-----"); 
       cb.setChecked(false); 
       Toast.makeText(getApplicationContext(), "Maximum Selection", Toast.LENGTH_LONG).show(); 
      } 


     } 

     else 
     { 

      System.out.println("else block in-----"); 

      if(!cb.isChecked()) 
      { 


        rowcheck.selected=true; 
        System.out.println(k--); 

      } 


      else if(cb.isChecked()) 
      { 


        rowcheck.selected=false; 
        System.out.println(k++); 



      } 

     } 





    Toast.makeText(getApplicationContext(), 
     "Clicked on Checkbox: " + cb.getText() + 
     " is " + cb.isChecked(), 
     Toast.LENGTH_LONG).show() 
     rowcheck.setSelected(cb.isChecked()); 
    } 
    }); 
    } 
    else 
    { 
    holder = (ViewHolder) convertView.getTag(); 
    } 

    Country rowcheck = rowcheckList.get(position); 
    // holder.code.setText(" (" + rowcheck.getCode() + ")"); 
    holder.code.setText(rowcheck.getName()); 
    // holder.name.setText(rowcheck.getName()); 
    holder.name.setChecked(rowcheck.isSelected()); 
    holder.name.setTag(rowcheck); 

    return convertView; 

    } 
    } 

    private void checkButtonClick() { 

     Button myButton = (Button) findViewById(R.id.findSelected); 
     myButton.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       StringBuffer responseText = new StringBuffer(); 
       responseText.append("The following were selected...\n"); 

       ArrayList<Country> rowcheckList = dataAdapter.rowcheckList; 

       System.out.println("Size" + rowcheckList.size()); 
       int j = 0; 
       ArrayList<String> stt = new ArrayList<String>(); 
       for (int i = 0; i < rowcheckList.size(); i++) { 
        Country rowcheck = rowcheckList.get(i); 
        // System.out.println(rowcheck.getName()); 

        if (rowcheck.isSelected()) { 
         stt.add(rowcheck.getName()); 
         // Country.st=new ArrayList<String>(); 
         String s = rowcheck.getName(); 
         System.out.println("String--" + rowcheck.getName()); 
         Country.st.add(s); 
         j = j++; 
         System.out.println(j++); 

         responseText.append("\n" + rowcheck.getName()); 

        } 

       } 
       for (int i = 0; i < stt.size(); i++) { 
        System.out.println("Names----" + stt.get(i).toString()); 
       } 

       if (j >= 1 && j <= 5) { 

        Intent i = new Intent(ListViewCheckboxesActivity.this, 
          PickedItemListView.class); 
        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        startActivity(i); 
       } else { 
        Toast.makeText(ListViewCheckboxesActivity.this, 
          "Maximum 5 Selection Allowed", Toast.LENGTH_LONG) 
          .show(); 
       } 

       Toast.makeText(ListViewCheckboxesActivity.this, responseText, 
         Toast.LENGTH_LONG).show(); 

      } 
     }); 

    } 
//Logout ALert Box 
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 

      LayoutInflater inflater = LayoutInflater 
        .from(ListViewCheckboxesActivity.this); 
      View dialogview = inflater.inflate(R.layout.logout_popup, null); 
      final Button ok = (Button) dialogview.findViewById(R.id.ok); 
      final Button cancel = (Button) dialogview.findViewById(R.id.cancel); 
      AlertDialog.Builder dialogbuilder = new AlertDialog.Builder(
        (ListViewCheckboxesActivity.this)); 
      dialogbuilder.setView(dialogview); 
      dialogbuilder.setInverseBackgroundForced(true); 
      alertdialog = dialogbuilder.create(); 
      alertdialog.show(); 

      ok.setOnClickListener(new OnClickListener() { 

       public void onClick(View paramView) { 
        alertdialog.dismiss(); 
        final Intent intent = new Intent(
          ListViewCheckboxesActivity.this, 
          LoginActivity.class); 
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        startActivity(intent); 
        finish(); 
       } 

      }); 

      cancel.setOnClickListener(new OnClickListener() { 

       public void onClick(View paramView) { 
        alertdialog.cancel(); 
       } 
      }); 

     } 
     return super.onKeyDown(keyCode, event); 
    } 

} 
0
checkBox_sound.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { 

      varBoolSoundOn = (isChecked) ? true : false; 

     } 
    }); 

它完美的作品...