2016-05-16 7 views
0

リストビューのチェックボックスをチェックボックスでチェックし、別のタブでクリックしたリストビューを変更した後、前のタブに戻ると、チェックする前にチェックボックスがオンになりません.... タブを変更したときにチェックボックスをチェックし、前のタブに戻った後もチェックボックスを維持しますか? 事前に感謝! タブを変更するとチェックボックスをチェックする方法と、前のタブに戻った後にチェックボックスをチェックする方法はありますか?

この

は....私のコードです

アダプタ:

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:あなたはSharedPreferencesに値を保存することで、比較的簡単にこれを行うことができます

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













    } 



} 

答えて

1

。好みの値を確認するには、この操作を行うことができます:

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

その後、isCheckedの状態をチェックすることができます。 @Vuckoが示唆しているように、あなたがこのアクティビティに戻るたびにこのコードを実行する必要があります。次に例を示します。

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

あなたはSharedPreferencesにあるチェックボックスの値を保存したい場合は、あなたがこのような何かを行うことができます:

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

はそれが役に立てば幸い!

+0

私は、この 'isChecked'パーツをフラグメントに再訪問するたびに呼び出されるいくつかのメソッドに入れるべきだと追加したいと思います。 – Vucko

+0

良いアイデアは、今私の答えに追加します。 – AkashBhave

+0

は動作しません..... – markella

関連する問題