1

I have a problem:if I check a checkbox and after I click on another tab and after I came back to previous tab, the checkbox,which was checked before,is unchecked... Maybe I wrong to use shared preferences...ANY IDEA?

THANKS IN ADVANCE! I HOPE IN YOU!

PS:SAME THIS:http://www.codeproject.com/Articles/31849/Maintaining-States-of-Selected-CheckBoxes-in-Diffe

ADAPTER CLASS:

public abstract class PlanetAdapter extends ArrayAdapter<Planet> implements CompoundButton.OnCheckedChangeListener

{

  private List<Planet> planetList;
  private Context context;
  ArrayList<Birra> objects;
    //SharedPreferences settings;

    public  PlanetAdapter(List<Planet> planetList, Context context) {

      super(context, R.layout.single_listview_item, planetList);
       // settings = context.getSharedPreferences("data", Context.MODE_PRIVATE);
      this.planetList = planetList;
      this.context = context;
  }




    public  class PlanetHolder  {
      public TextView planetName;
      public TextView distView;
      public TextView valuta;
      public CheckBox chkBox;
      public EditText edit;
      //public String quantità;
       // private boolean checked;





    }

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

View row = convertView;
      PlanetHolder holder = null;

      if (row == null) {
          LayoutInflater inflater = ((Activity) context).getLayoutInflater();
          row = inflater.inflate(R.layout.single_listview_item, parent, false);
          holder = new PlanetHolder();
          holder.planetName = (TextView) row.findViewById(R.id.name);
          holder.distView = (TextView) row.findViewById(R.id.dist);
          holder.valuta = (TextView) row.findViewById(R.id.valuta);
          holder.chkBox = (CheckBox) row.findViewById(R.id.chk_box);
          holder.edit = (EditText) row.findViewById(R.id.editText);
          holder.edit.setVisibility(View.GONE);
          holder.edit.setEnabled(false);
          row.setTag(holder);

      } else {
          holder = (PlanetHolder) row.getTag();
      }
       final Planet p = planetList.get(position);

      SharedPreferences settings = context.getSharedPreferences("data", Context.MODE_PRIVATE);
      boolean Checked = settings.getBoolean("Material", false);
      holder.chkBox.setChecked(Checked);



      final PlanetHolder finalHolder = holder;


      holder.chkBox.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              if (finalHolder.chkBox.isChecked()) {
                  finalHolder.edit.setVisibility(View.VISIBLE);
                  finalHolder.edit.setEnabled(true);

                  SharedPreferences settings = context.getSharedPreferences("data", Context.MODE_PRIVATE);
                  settings.edit().putBoolean("Material", finalHolder.chkBox.isChecked()).commit();
                  finalHolder.edit.addTextChangedListener(new TextWatcher() {
                      @Override
                      public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                      }

                      @Override
                      public void onTextChanged(CharSequence s, int start, int before, int count) {
                      }

                      @Override
                      public void afterTextChanged(Editable s) {
                          p.setQuantità(finalHolder.edit.getText().toString().trim());


                      }
                  });
              } else {
                  finalHolder.edit.setVisibility(View.GONE);
                  finalHolder.edit.setEnabled(false);
                  finalHolder.edit.setText(null);

              }

          }
      });


      holder.planetName.setText(p.getName());
      holder.distView.setText("" + p.getDistance());
      holder.valuta.setText("" + p.getValuta());
      holder.chkBox.setChecked(p.isSelected());

      holder.chkBox.setTag(p);
      holder.edit.setEnabled(false);



      return row;
  }



    ArrayList<Planet> getBox() {
      ArrayList<Planet> box = new ArrayList<Planet>();
      for (Planet p : planetList) {
          if (p.selected)
              box.add(p);
      }
      return box;
  }


    }

FRAGMENT:

public class MyListFragment extends Fragment implements
        android.widget.CompoundButton.OnCheckedChangeListener {

    ListView lv;
    ArrayList<Planet> planetList;
    PlanetAdapter plAdapter;
    BirraAdapter biAdapter;
    PlanetAdapter.PlanetHolder holder;
    boolean myBoolean=false;

    private SharedPreferences mSharedPreferences;
    private SharedPreferences.Editor mEditor;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_list2, container, false);
        /*mSharedPreferences = getContext().getSharedPreferences("data", Context.MODE_PRIVATE);
        Boolean mIsChecked = mSharedPreferences.getBoolean("zao", false);
        holder.chkBox.setChecked(mIsChecked);*/




        Button mButton = (Button) rootView.findViewById(R.id.button);
        mButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                showResult(v);


            }
        });
        //return inflater.inflate(R.layout.fragment_list2, container, false);
        return rootView;
    }


    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);


        lv = (ListView)getView().findViewById(R.id.listview);
        displayPlanetList();


    }


    private void displayPlanetList() {

        planetList = new ArrayList<Planet>();
        planetList.add(new Planet("Margherita", 6, "€"));
        planetList.add(new Planet("Diavola", 7,"€"));
        planetList.add(new Planet("Bufalina", 5,"€"));
        planetList.add(new Planet("Marinara", 5, "€"));
        planetList.add(new Planet("Viennese", 4, "€"));

        plAdapter = new PlanetAdapter(planetList, getContext()) {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                int pos = lv.getPositionForView(buttonView);
                if (pos != ListView.INVALID_POSITION) {
                    Planet p = planetList.get(pos);
                    p.setSelected(isChecked);


            /*Toast.makeText(
                getActivity(),
                "Clicked on Pizza: " + p.getName() + ". State: is "
                        + isChecked, Toast.LENGTH_SHORT).show();*/
                }


            }
        };

        lv.setAdapter(plAdapter);
        plAdapter.notifyDataSetChanged();
    }

    @Override
    public void onResume() {
        super.onResume();
        holder.chkBox.setChecked(myBoolean);

    }



    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

        /*int pos = lv.getPositionForView(buttonView);
        if (pos != ListView.INVALID_POSITION) {
            Planet p = planetList.get(pos);
            p.setSelected(isChecked);


            *//*Toast.makeText(
                getActivity(),
                "Clicked on Planet: " + p.getName() + ". State: is "
                        + isChecked, Toast.LENGTH_SHORT).show();*//*
        }*/

    }


    public void showResult(View v) {
        String  result2 = "Selected Product are :";
        int totalAmount2=0;

        String a="";
        for (Birra b : biAdapter.getBox()){

            if (b.selected){

                result2 += "\n" + b.name+" "+b.distance+"€"+"q.tà :"+b.getQuantità();
                int quantitaInt= Integer.parseInt(b.getQuantità());
                totalAmount2+=b.distance * quantitaInt;
                //a=String.valueOf(totalAmount);


            }
        }
    /*  for (Planet p : plAdapter.getBox()) {
            if (p.selected){

                result += "\n" + p.name+" "+p.distance+"€"+"q.tà :"+p.getQuantità();
                int quantitaInt= Integer.parseInt(p.getQuantità() );
                totalAmount+=p.distance * quantitaInt;
                //a=String.valueOf(totalAmount);


            }
        }*/
      //Toast.makeText(getActivity(), result + "\n" + "Total Amount:=" + totalAmount + "€", Toast.LENGTH_LONG).show();
        Toast.makeText(getActivity(), result2 + "\n" + "Total Amount:=" + totalAmount2 + "€", Toast.LENGTH_LONG).show();

        /*Bundle bun2 = new Bundle();
        bun2.putString("scelta", result);
        TwoFragment fgsearch2 = new TwoFragment();
        fgsearch2.setArguments(bun2);
        android.support.v4.app.FragmentTransaction transaction2 = getActivity().getSupportFragmentManager().beginTransaction();
        transaction2.replace(R.id.content_main, fgsearch2);
        transaction2.commit();


        Bundle bun = new Bundle();
        bun.putString("totale", a);
        TwoFragment fgsearch = new TwoFragment();
        fgsearch.setArguments(bun);
        android.support.v4.app.FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.content_main2, fgsearch);
        transaction.commit();
*/












    }



}

ACTIVITY:

public class Main extends AppCompatActivity{


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        getSupportFragmentManager().beginTransaction().

                replace(R.id.fragmentContainer, new MyListFragment()).commit();



    }



}
Aditi Parikh
  • 1,522
  • 3
  • 13
  • 34

1 Answers1

0

For passing values between activities. You need to instance an object (of the fragment activity which you want to call) and add it your value (which is coming from checkbox). Kind of:

Fragment f = new Fragment();
Bundle b = new Bundle();
b.putString("checkValue", your_checkbox_value);
f.setArguments(b);

In your second fragment, you will recover it this value like:

String checkboxValue= getArguments().getString("checkValue");

For using Global Session Variable check this link: How to maintain session in android?

Community
  • 1
  • 1
Kenzo_Gilead
  • 2,187
  • 9
  • 35
  • 60