2016-05-10 9 views
0

私のコードが保存されない理由が分かりませんcheckboxチェックされた値。 checkboxをチェックして、別のタブをクリックして前のタブに戻ると、checkboxが選択されていません...私のコードでエラーが見つかったら幸いです!共有環境設定でチェックボックスの値を保存するにはどうすればよいですか?

IDEは私に言う:FATAL EXCEPTION: main java.lang.NullPointerException at line ".onCreateView(holder.chkBox.setChecked(true);"

なぜ?その後、

ListView lv; 
ArrayList<Planet> planetList; 
PlanetAdapter plAdapter; 
BirraAdapter biAdapter; 
PlanetAdapter.PlanetHolder holder; 



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

     /* SharedPreferences preferences = getContext().getSharedPreferences("MaterialTabs", android.content.Context.MODE_PRIVATE); 
      boolean mCheckBoxValue = preferences.getBoolean("CheckBox_Value", false); 

      if (mCheckBoxValue) { 
      holder.chkBox.setChecked(true); 


      } 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); 
    } 
    @Override 
    public void onPause() { 

     //get the instance variables 
     SharedPreferences preferences = getContext().getSharedPreferences("MaterialTabs", android.content.Context.MODE_PRIVATE); 
     boolean mCheckBoxValue = preferences.getBoolean("CheckBox_Value", false); 

     if (mCheckBoxValue) { 
      holder.chkBox.setChecked(true); 


     } else { 
      holder.chkBox.setChecked(false); 



     } 
     super.onPause(); 
    } 




    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

を行ったようgetBooleanを使用して、それを取得:

アダプタクラス:

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(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); final PlanetHolder finalHolder = holder; /*SharedPreferences preferences = getContext().getSharedPreferences("MaterialTabs", android.content.Context.MODE_PRIVATE); boolean mCheckBoxValue = preferences .getBoolean("CheckBox_Value", false); if (mCheckBoxValue) { holder.chkBox.setChecked(true); } else { holder.chkBox.setChecked(false); }*/ 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 preferences = getContext().getSharedPreferences("MaterialTabs", android.content.Context.MODE_PRIVATE); /* SharedPreferences.Editor editor = preferences.edit(); editor.putBoolean("showActivity", finalHolder.chkBox.isChecked()); editor.commit();*/ // boolean value= true; SharedPreferences.Editor mEditor = preferences.edit(); mEditor.putBoolean("CheckBox_Value", finalHolder.chkBox.isChecked()); mEditor.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()); SharedPreferences preferences = getContext().getSharedPreferences("PROJECT_NAME", android.content.Context.MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putString("KEY", finalHolder.edit.getText().toString().trim()); editor.commit(); } }); } 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断片? –

+0

"PlanetHolder"クラスのオブジェクト – Markella92

+0

アダプターの外のビューホルダーへの参照はありません –

答えて

0
@Override 
public void afterTextChanged(Editable s) { 
         p.setQuantità(finalHolder.edit.getText().toString().trim()); 
         SharedPreferences preferences = getContext().getSharedPreferences("PROJECT_NAME", android.content.Context.MODE_PRIVATE); 
         SharedPreferences.Editor editor = preferences.edit(); 
         editor.putString("KEY", finalHolder.edit.getText().toString().trim()); 
         editor.putBoolean("CheckBox_Value", finalHolder.chkBox.isChecked()); 
         editor.commit(); 

} 

、あなたはすでにあなたの中に `holder`は何

0
@Override 

    protected void onCreate(Bundle savedInstanceState) { 

     // TODO Auto-generated method stub 

     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 



     checkBox = (CheckBox) findViewById(R.id.checkBox1);       
     SavedPreferences(); 

    } 


    private void savePreferences(boolean value) { 

     SharedPreferences sharedPreferences = PreferenceManager 

       .getDefaultSharedPreferences(this); 

     Editor editor = sharedPreferences.edit(); 

     editor.putBoolean(value); 

     editor.commit(); 

    } 





public class activity2 extends fragment{ 

     public onCreateView extends Fragment { 
     SharedPreferences sharedPreferences = PreferenceManager 

       .getDefaultSharedPreferences(this); 

     boolean checkBoxValue = sharedPreferences.getBoolean("CheckBox_Value", false);  

     if (checkBoxValue) { 

      checkBox.setChecked(true); 

     } else { 

      checkBox.setChecked(false); 

     } 


    } 



    } 
+0

コードを試してください – shlomo

+0

私はアダプタにプライベートvoid savePreferences(ブール値)を書き込む必要がありますか? – Markella92

+0

onCreateのsavePreferencesはアダプタとは関係ありません。chackBox – shlomo

関連する問題