1

wenn ich ein Kontrollkästchen aktivieren und auf Registerkarte ohne Listenansicht mit Kontrollkästchen gehen und kam zu vorherigen Registerkarte, ich sehe Kontrollkästchen zuvor aktiviert ... aber wenn ich auf eine andere Registerkarte mit Listenansicht mit klicken checkbox, mein Programm stürzt ab ... warum? jetzt poste ich meinen Code ... Ich hoffe, dass Sie mir helfen können!shared Einstellungen und onPause funktioniert nicht

Vielen Dank im Voraus!

Adapter-Klasse:

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


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

FIRST FRAGMENT KLASSE MIT LISTVIEW MIT CHECKBOX:

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, "€")); 
     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();*/ 
    } 
} 

zweiten Fragmente OHNE LISTVIEW:

public class TwoFragment extends Fragment { 

    private View v; 
    Intent chooser = null; 


    public TwoFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View rootView = inflater.inflate(R.layout.fragment_two, container, false); 
     Button mButton = (Button) rootView.findViewById(R.id.newbutton); 
     mButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 

       sendemail(); 


      } 
     }); 
     TextView titolo3 = (TextView) rootView.findViewById(R.id.result2); 
     TextView titolo2 = (TextView) rootView.findViewById(R.id.quantità2); 
     //TextView titolo = (TextView)rootView.findViewById(R.id.quantità3); 

     Bundle bundle2 = getArguments(); 
     if (bundle2 != null) { 
      String string = bundle2.getString("scelta2", null); 
      titolo3.setText(string); 
     } 
     Bundle bundle = getArguments(); 
     if (bundle != null) { 
      String myInt = bundle.getString("totale2", null); 
      titolo2.setText(myInt); 

     } 
     /* Bundle bundle3=getArguments(); 
     if(bundle3 != null){ 
      String valuta=bundle3.getString("valuta", null); 
      titolo.setText(valuta); 

     }*/ 
     return rootView; 
    } 

    public void sendemail() { 

     Intent intent = new Intent(Intent.ACTION_SEND); 
     intent.setData(Uri.parse("mailto:")); 
     String[] to = {"[email protected]"}; 
     intent.putExtra(Intent.EXTRA_EMAIL, to); 
     intent.putExtra(Intent.EXTRA_SUBJECT, "ciao"); 
     intent.putExtra(Intent.EXTRA_TEXT, "zao"); 
     intent.setType("message/rfc822"); 
     chooser = intent.createChooser(intent, "manda email"); 
     startActivity(chooser); 
    } 
} 

Dritten Teil MIT LISTVIEW MIT CHECKBOX:

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

    ListView lv2; 
    ArrayList<Birra> birraList; 
    BirraAdapter biAdapter; 
    BirraAdapter.BirraHolder birraHolder; 
    BirraAdapter.BirraHolder holderr; 


    public ThreeFragment() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_three, container, false); 

     Button mButton = (Button) rootView.findViewById(R.id.button2); 
     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); 

     lv2 = (ListView) getView().findViewById(R.id.listview2); 
     displayBirraList(); 
    } 


    private void displayBirraList() { 

     birraList = new ArrayList<Birra>(); 
     birraList.add(new Birra("Paulaner", 6, "€")); 
     birraList.add(new Birra("Forst", 7, "€")); 
     birraList.add(new Birra("Peroni", 5, "€")); 
     birraList.add(new Birra("Corona", 5, "€")); 
     birraList.add(new Birra("Nastro Azzurro", 4, "€")); 
     biAdapter = new BirraAdapter(birraList, getContext()) { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       int pos = lv2.getPositionForView(buttonView); 
       if (pos != ListView.INVALID_POSITION) { 
        Birra b = birraList.get(pos); 
        b.setSelected(isChecked); 


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


      } 
     }; 
     lv2.setAdapter(biAdapter); 
    } 

    /* @Override 
    public void onPause() { 

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

     if (mCheckBoxValuee) { 
      holderr.chkBox_birra.setChecked(true); 


     } else { 
      holderr.chkBox_birra.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 result = "Selected Product are :"; 
     int totalAmount = 0; 
     String c = ""; 

     for (Birra b : biAdapter.getBox()) { 
      if (b.selected) { 

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


      } 
     } 
     Toast.makeText(getActivity(), result + "\n" + "Total Amount:=" + totalAmount + "€", Toast.LENGTH_LONG).show(); 
     /* Bundle bun2 = new Bundle(); 
     bun2.putString("scelta2", 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("totale2", c); 
     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();*/ 
    } 
} 

Logcat:

05-10 12:34:17.975 20371-20371/info.androidhive.materialtabs E/AndroidRuntime: FATAL EXCEPTION: main 
java.lang.NullPointerException 
at info.androidhive.materialtabs.activity.MyListFragment.onPause(MyListFragment.java:103) 
at android.support.v4.app.Fragment.performPause(Fragment.java:2139) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1117) 
at android.support.v4.app.FragmentManagerImpl.detachFragment(FragmentManager.java:1408) 
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:727) 
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) 
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570) 
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) 
at android.support.v4.view.ViewPager.populate(ViewPager.java:1177) 
at android.support.v4.view.ViewPager.populate(ViewPager.java:1025) 
at android.support.v4.view.ViewPager$3.run(ViewPager.java:254) 
at android.os.Handler.handleCallback(Handler.java:605) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4424) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
at dalvik.system.NativeStart.main(Native Method) 
+0

Bitte fügen Sie die Ausnahme-Stack-Trace. – Egor

+0

ok, ich habe gerade logcat – Markella92

+0

melden Sie Ihre Checkbox in FirstFragment. Ich denke, Sie haben es nicht –

Antwort

0

Ihr Halter in Verfahren onPause (MyListFragment) wurde nicht instanziiert. Also, wenn es um die Linie kam

holder.chkBox.setChecked(true); 

Diese Ausnahme würde kommen

+0

, also muss ich holder.chkBox.setChecked (false) in Methode onPause instanziiert? – Markella92

+0

Sie müssen dies nicht in der Methode onPause tun. Aber Sie müssen Halter vor dieser Linie instanziieren –

+0

Wie ich Instancion Halter? – Markella92

0

java.lang.NullPointerException bedeutet, dass Sie versuchen, eine Komponente zu verwenden, die nicht initialisiert wird.

hier ist Ihr Motiv gesetzt Checked/unChecked der Checkbox in PlanetAdapter von onPause() Rückruf. Sie können auf diese Weise:

  1. Erstellen Sie eine Schnittstelle, die zwischen Fragment zu Ihrem Adapter kommuniziert.
  2. In Ihrem Callback-Befehl senden an Ihren Adapter für check/uncheck Ihrer Checkbox-Liste.

Beispiel: Angenommen, Ihre Schnittstelle, wie es ist:

public interface AdapterCallback { 
    void onCheckboxCallback(boolean isChecked); 
} 

In Ihrem Adapter implementiert AdapterCallback Schnittstelle. Dann erhalten Sie onCheckboxCallback() Methode.

@Override 
    public void onCheckboxCallback(boolean isChecked) { 
//  Do your checkbox check/uncheck here 
    } 

Bei dieser Methode können Sie anhand Ihres isChecked-Werts aktiviert/deaktiviert werden.

nun in Ihrem Fragment/Aktivität, die PlanetAdapter bevölkern, rufen Sie diese Methode

if (mCheckBoxValue) { 
      plAdapter.onCheckboxCallback(true); 


     } else { 
      plAdapter.onCheckboxCallback(false);