1

我有一个问题:如果我选中一个复选框,并且在点击另一个选项卡后,当我回到之前的选项卡时,之前检查过的复选框未选中...也许我错误地使用共享首选项.. 。任何想法?当我单击其他选项卡时,如何维护所选CheckBox的状态?

感谢提前!我希望你!

PS:SAME THIS:http://www.codeproject.com/Articles/31849/Maintaining-States-of-Selected-CheckBoxes-in-Diffe

适配器类:

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

{ 

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

    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à; 
     // private 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); 

     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", 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()); 


         } 
        }); 
       } 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 myBoolean=false; 

    private SharedPreferences mSharedPreferences; 
    private SharedPreferences.Editor mEditor; 

    @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); 
     /*mSharedPreferences = getContext().getSharedPreferences("data", Context.MODE_PRIVATE); 
     Boolean mIsChecked = mSharedPreferences.getBoolean("zao", false); 
     holder.chkBox.setChecked(mIsChecked);*/ 




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

    @Override 
    public void onResume() { 
     super.onResume(); 
     holder.chkBox.setChecked(myBoolean); 

    } 



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












    } 



} 

ACTIVITY:

public class Main extends AppCompatActivity{ 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 


     getSupportFragmentManager().beginTransaction(). 

       replace(R.id.fragmentContainer, new MyListFragment()).commit(); 



    } 



} 
+0

你是什么意思与另一标签?这意味着另一项活动? –

+0

我为活动做了一个片段....所以我在活动中包含片段 –

+0

您可以将复选框值存储在全局会话变量中并将其加载到onCreate中,或者在活动之间传递此值并将其加载到onCreate中, ...我想你的问题是在活动之间切换,所以你需要将该值存储在某个地方...... –

回答

0

对于ACTIV之间传递值伊蒂埃斯。您需要实例化一个对象(您想要调用的片段活动)并将其添加到您的值(该值来自复选框)。种:

Fragment f = new Fragment(); 
Bundle b = new Bundle(); 
b.putString("checkValue", your_checkbox_value); 
f.setArguments(b); 

在你的第二个片段,你会恢复它这样的值:

String checkboxValue= getArguments().getString("checkValue"); 

对于使用全局会话变量检查此链接: How to maintain session in android?

相关问题