1

私はandroid.iの初心者です。簡単な数学アプリを作成します。私は右のオプションを選択するためにチェックボックスを使用しますが、問題はここで答えのオプションが1つだけでなく2つであり、3つは複数選択であることを意味するので、チェックボックスを使用します

chkOption.setOnCheckedChangeListener(this);

イベントを処理して、選択値を1つのArraylistに保存しようとしますが、オプションを選択すると値がarrayListに追加されますが、チェックを外すと(選択解除)、イベントが発生し、値がarraylistに追加されます。私のコードは以下です

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

forMetchCheckbow は私の String ArrayList です。どうすればよいですか? この問題を処理する方法。ユーザーがオプションの選択を解除すると、チェックボックスの選択値が ArrayList から削除されます。可能ですか?

4

5 に答える 5

7

複数のチェックボックスがあり、すべてのチェックボックスにグローバルリスナーを設定しているようです。したがって、その場合、特定のチェックボックスのイベントも識別する必要があります。

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){
           ....
        }
    }  

など、リスナーは完璧に機能します。

于 2012-07-06T08:06:15.210 に答える
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);


                       }

});
于 2012-09-19T07:11:01.940 に答える
1

間違っているのは、if条件です。そのはず:

if( isChecked ) 

そしてそうではない

if( chk.isChecked() )
于 2012-07-06T07:58:47.377 に答える
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);
    }

}
于 2013-11-15T11:36:58.757 に答える