2016-05-12 4 views
0

Ich habe ein Problem: wenn ich eine Checkbox ankreuze und nachdem ich auf eine andere Registerkarte geklickt habe und nachdem ich zur vorherigen Registerkarte zurückgekickt habe, ist das Kontrollkästchen vor der Prüfung jetzt nicht aktiviert ... also denke ich, nur die Datei zu speichern und zu lesen Das Kontrollkästchen wurde aktiviert. Ich benutzte gemeinsame Vorlieben, aber es funktioniert nicht .... So ist meine Frage:Wie schreibt und liest man in/aus der Datei nur das Kontrollkästchen?

Wie kann ich schreiben/lesen auf/von der Datei nur das Kontrollkästchen überprüft?

Ich hoffe, dass Sie mir helfen können! DANKE IM VORAUS ALLE!

dies ist mein Code:

ADAPTER:

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

{ 

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


    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à; 



    } 

    @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", true).apply(); 
        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 mCheckBoxValue; 
    private CheckBox chkBox; 


    @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, "€")); 
     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); 
    } 





    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

Wenn Sie darauf klicken Sie boolean variavel zum Beispiel sparen können:

boolean isChecked;

if(isChecked(){ 
checked = true; 
}else{ 
checked = false;} 
saveInFile(); 

Benötigen Sie den Code zum Speichern in der Datei?

private void loadFile(){ 
     FileInputStream fis = null; 
     ObjectInputStream ois = null; 

     if(this.isExternalStorageAvailable()) { 
      try { 
       fis = new FileInputStream(
         new File(this.getExternalFilesDir("file"), "file.dat")); 
       ois = new ObjectInputStream(fis); 

       this.checked = (Boolean)ois.readObject(); 

      } catch (FileNotFoundException e) { 
       //Toast.makeText(main, "File doesn't exist", Toast.LENGTH_SHORT).show(); 
      } catch (StreamCorruptedException e) { 
       //Toast.makeText(main, "Error opening file", Toast.LENGTH_SHORT).show(); 
      } catch(EOFException e){ 
       try { 
        if(ois != null) 
         ois.close(); 

        if(fis != null) 
         fis.close(); 
       } catch (IOException e1) { 
        e1.printStackTrace(); 
       } 
      } catch (IOException e) { 
       //Toast.makeText(main, "File read error", Toast.LENGTH_SHORT).show(); 
      } catch (ClassNotFoundException e) { 
       //Toast.makeText(main, "Class Booelan doesn't exist", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 
    private void saveInFile(){ 
     if(this.isExternalStorageAvailable()){ 
      if(!this.isExternalStorageReadOnly()){ 
       try { 
        FileOutputStream fos = new FileOutputStream(
          new File(this.getExternalFilesDir("file"), "file.dat")); 
        ObjectOutputStream oos = new ObjectOutputStream(fos); 

        oos.writeObject(checked); 
        oos.close(); 
        fos.close(); 

       } catch (FileNotFoundException e) { 
        //Toast.makeText(main, "Error opening File", Toast.LENGTH_SHORT).show(); 
       } catch (IOException e) { 
        //Toast.makeText(main, "Error saving File", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     } 
    } 
    private static boolean isExternalStorageAvailable(){ 
     String estadoSD = Environment.getExternalStorageState(); 
     if(Environment.MEDIA_MOUNTED.equals(estadoSD)) 
      return true; 

     return false; 
    } 
    private static boolean isExternalStorageReadOnly(){ 
     String estadoSD = Environment.getExternalStorageState(); 
     if(Environment.MEDIA_MOUNTED_READ_ONLY.equals(estadoSD)) 
      return true; 

     return false; 
    } 
+0

ja, bitte !!!! – Markella92

+0

fertig :) Ich denke, das ist alles was Sie brauchen, aber wenn etwas nicht stimmt, sagen Sie einfach –

+0

funktioniert nicht .... – Markella92

0

Es scheint, wie Sie vergessen, den Check-Zustand zu Ihrem Planet Objekt zu speichern. Wenn Sie also zurück kam, wird das Kontrollkästchen in ListView deaktivieren

holder.chkBox.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       p.setSelected(finalHolder.chkBox.isChecked()); //add this 

       if (finalHolder.chkBox.isChecked()) { 
        ... 
       } else { 
        ... 
       } 

      } 
     }); 
+0

funktioniert nicht ... – Markella92

0

Sie speichern müssen die in onSaveInstanceState fragment Zustand() -Methode.

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); // store value in key , value order 
    outState.putInt("curChoice", mCurCheckPosition); 
} 

Später können Sie es onActivityCreated() -Methode verwenden.

@Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
    if (savedInstanceState != null) { 
      // Restore last state for checked position. 
      mCurCheckPosition = savedInstanceState.getInt("curChoice", 0); 
     } 
} 
+0

funktioniert nicht ... – Markella92

Verwandte Themen