2016-05-14 59 views
0

我需要保存複選框簽入sqlite database,因爲如果我檢查一個checkbox並點擊其他tab後,我點擊上一個標籤,複選框之前檢查現在不檢查.... 我希望你! 感謝提前! 這是我的代碼:如何保存複選框簽入數據庫?

適配器:

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

{ 

    private List<Planet> planetList; 
    private Context context; 
    ArrayList<Birra> objects; 
    SharedPreferences settings; 
    public boolean Checked; 

    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à; 
     public 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); 
     settings = context.getSharedPreferences("data", Context.MODE_PRIVATE); 



     Checked= settings.getBoolean("Material", false); 
     if(Checked) { 
      // System.out.println(Checked); 
      holder.chkBox.setChecked(true); 
     }else{ 
      System.out.println(Checked); 
     } 


     final PlanetHolder finalHolder = holder; 


     holder.chkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if (finalHolder.chkBox.isChecked()) { 
        finalHolder.edit.setVisibility(View.VISIBLE); 
        finalHolder.edit.setEnabled(true); 
        settings.edit().putBoolean("Material", finalHolder.chkBox.isChecked()).commit(); 
        System.out.println("presa"); 
       } else { 
        finalHolder.edit.setVisibility(View.GONE); 
        finalHolder.edit.setEnabled(false); 
        finalHolder.edit.setText(""); 
        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()); 


      } 
     }); 


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

} 

片斷:

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


    /* SharedPreferences settings = getContext().getSharedPreferences("data", Context.MODE_PRIVATE); 
     boolean Checked = settings.getBoolean("Material", false); 
     //holder.chkBox.setChecked(Checked); 
     if (Checked == true){ //false is default value 
      holder.chkBox.setChecked(true); //it was checked 
     } else{ 
      holder.chkBox.setChecked(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); 
     //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(); 
*/ 













    } 



} 
+0

你的意思是sqlite數據庫? – Pooya

+0

是的!!!!!!!!!!!! – markella

+0

到目前爲止你有嘗試過什麼嗎? – Pooya

回答

0

你想使用SQLite只是爲了節省支票或已經在使用SQLite數據庫?

首先,當您返回檢查頁面時顯示正確的選中項目,您需要將其臨時存儲在ArrayList中。 你也可以爲此使用一個HashMap。

HashMap<Integer,boolean> checkMap = new HashMap<>(); 

現在,當進行檢查時,只要該值添加到地圖中,類似這樣的

checkmap.put(position,true) or checkmap.put(position,false)// if unchecked. 

你可以有這個checkmap在MainActivity爲靜態,當你回到檢查頁,只需檢查hashmap值,如果爲true,請在適配器中再次檢查項目。

if(checkMap.get(position)){ 
    // check the check box 
} else { 
    // else uncheck the box 
} 

現在這種方式你總是會在哈希映射中有選中和未選中的值。 現在你必須循環遍歷所有的值並將它們存儲在sqlite中。 SQLite的,你可以使用下面的庫:http://satyan.github.io/sugar/

+0

好吧,但是如果您看到我的代碼,我嘗試使用共享偏好....你能說我如何在我的代碼中使用共享偏好?因爲現在共享首選項不起作用 – markella

+0

在你的列表視圖中,如果你在每一行都有複選框,那麼你不能使用sharedpreferences來使它正常工作。你必須使用散列表。 當列表視圖滾動時會發生什麼情況,所有行都會刷新,因此無論您是否將其保存在sharedpref中,您的複選框都將再次取消選中。 如果你真的想使用sharedpreference(這是不正確的方式),你需要像這樣保存 settings.edit()。putBoolean(position,finalHolder.chkBox.isChecked())。commit() 只有使用位置,您才能找回該位置上的檢查值。 –

+0

然後在檢索時必須這樣做: Checked = settings.getBoolean(position,false); if(Checked){System.out.println(Checked); holder.chkBox.setChecked(true);其他{ System.out.println(選中); } –

0

,您仍然可以實現您與共享偏好做什麼,但你需要做正確的keyvalue的映射。我認爲planetName在這裏是獨一無二的。所以,如果planetName是獨一無二的,然後"Material_"+planetName將是獨一無二的,你可以用它來保存和共享偏好檢索數據:

變化:

Checked= settings.getBoolean("Material", false); 

要:

Checked= settings.getBoolean("Material_"+holder.planetName.getText().toString(), false); 

,並修改您的點擊聽衆看起來像這樣:

holder.chkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if (finalHolder.chkBox.isChecked()) { 
        finalHolder.edit.setVisibility(View.VISIBLE); 
        finalHolder.edit.setEnabled(true); 
        settings.edit().putBoolean("Material_"+finalHolder.planetName.getText().toString(), finalHolder.chkBox.isChecked()).commit(); 
        System.out.println("presa"); 
       } else { 
        finalHolder.edit.setVisibility(View.GONE); 
        finalHolder.edit.setEnabled(false); 
        finalHolder.edit.setText(""); 
        settings.edit().putBoolean("Material_"+finalHolder.planetName.getText().toString(), finalHolder.chkBox.isChecked()).commit(); 
       } 

      } 
     }); 
+0

不工作相同.... – markella

+0

@markella這是很難從這裏調試,但你可以做它從你身邊看到哪一部分給你一個問題。把Log.v()放在getView的幾個區域看看出了什麼問題 – Pooya

+0

我打印的位置,如果我檢查第一個複選框的位置是「0」,這沒關係......當我改變標籤並回到之前的標籤在CONSOLLE我有「0」,「1」,「2」,「3」,「4」和複選框之前檢查現在不檢查 – markella

相關問題