2016-05-16 11 views
0

Wenn ich eine Checkbox in einer Listenansicht mit Checkbox ankreuze und nachdem ich die Listenansicht angeklickt habe, auf eine andere Registerkarte, wenn ich zur vorherigen Registerkarte zurückkehre, dann ist das Checkbox vorher nicht markiert .... Also, wie kann ich Kontrollkästchen beibehalten, wenn ich den Tab ändere und nachdem ich zum vorherigen Tab zurückgekehrt bin? DANKE IM VORAUS!Wie wird das Kontrollkästchen aktiviert, wenn ich den Tab ändere und nachdem ich zum vorherigen Tab zurückgekehrt bin?

dies ist mein Code ....

ADAPTER:

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

{ 

    private List<Planet> planetList=null; 
    private Context context=null; 
    ArrayList<Birra> objects; 
    private HashMap<Integer, Planet> pizzaSelected = new HashMap<>(); 
    public boolean Checked; 

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

     super(context, R.layout.single_listview_item, planetList); 
     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à; 
     public boolean checked; 
     public TextView id; 
    } 
    @Override 
    public int getCount() { 
     return planetList.size(); 
    } 

    @Override 
    public Planet getItem(int position) { 
     return planetList.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return planetList.get(position).getId(); 
    } 


    @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); 
      holder.id = (TextView) row.findViewById(R.id.id); 


      row.setTag(holder); 

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


     if (pizzaSelected.get(p.getId())!=null){ 
      holder.chkBox.setChecked(true); 
      System.out.println(p.getId()); 
      System.out.println("mantenuta"); 

     }else{ 
      System.out.println(" non mantenuta"); 

     } 



     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); 
        pizzaSelected.put(p.getId(), p); 
        System.out.println(p.getId()); 
       } else { 

        finalHolder.edit.setVisibility(View.GONE); 
        finalHolder.edit.setEnabled(false); 
        finalHolder.edit.setText(null); 
        pizzaSelected.remove(p.getId()); 

       } 

      } 
     }); 



     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()); 


      } 
     }); 


       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); 
       // holder.id.setId(p.getId()); 


     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; 




    @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); 

     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, "€",1)); 
     planetList.add(new Planet("Diavola", 7,"€",2)); 
     planetList.add(new Planet("Bufalina", 5,"€",3)); 
     planetList.add(new Planet("Marinara", 5, "€",4)); 
     planetList.add(new Planet("Viennese", 4, "€",5)); 

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



    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(); 
*/ 













    } 



} 

Antwort

1

Sie dies durch Speichern Sie den Wert auf SharedPreferences ziemlich leicht tun konnte. Um die Werte der Einstellungen zu überprüfen, können Sie dies tun:

SharedPreferences states = getSharedPreferences("states", Context.MODE_PRIVATE); 
boolean isChecked = states.getBoolean("checkBox1", false); 

Sie könnten dann überprüfen den Zustand der isChecked. Wie von @Vucko vorgeschlagen, sollten Sie diesen Code jedes Mal ausführen, wenn Sie zu dieser Aktivität zurückkehren. Hier ein Beispiel:

if(isChecked) { 
    checkBox1.setChecked(true); 
} else { 
    checkBox1.setChecked(false); 
} 

Wenn Sie den Wert eines CheckBox den SharedPreferences speichern möchten, können Sie etwas tun könnte:

checkBox1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if(isChecked) { 
        editor.putBoolean("checkBox1", true); 
       } else { 
       editor.putBoolean("checkBox1", false); 
       } 
       editor.commit(); 
      } 
     } 
    ); 

Hoffe, es hilft!

+0

Ich würde nur hinzufügen, dass er diesen 'isChecked' Teil in eine Methode einfügen sollte, die jedes Mal aufgerufen wird, wenn Sie das Fragment erneut besuchen. – Vucko

+0

Gute Idee, die ich jetzt zu meiner Antwort hinzufüge. – AkashBhave

+0

funktioniert nicht ..... – markella

Verwandte Themen