1

當我停留在頁面查看器上的選項卡上,並選擇一個複選框,當我點擊另一個選項卡時,我之前選擇的複選框未選中....爲什麼?爲什麼複選框沒有被選中,如果我點擊另一個選項卡?

我希望你能幫助我。

謝謝大家!!!!!

public abstract class BirraAdapter extends ArrayAdapter<Birra> implements CompoundButton.OnCheckedChangeListener 
{ 
    private List<Birra>birraList; 
    private Context context2; 
    ArrayList<Birra> objects; 

    public BirraAdapter(List<Birra> birraList, Context context2) { 
     super(context2, R.layout.single_listview_item_birra, birraList); 
     this.birraList = birraList; 
     this.context2 = context2; 
    } 
    public class BirraHolder { 
     public TextView birraName; 
     public TextView birraprezzo; 
     public TextView valuta_birra; 
     public CheckBox chkBox_birra; 
     public EditText edit_birra; 
     public String quantità; 
    } 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
View row = convertView; 
     BirraHolder birraHolder = null; 
     if (row == null) { 
      LayoutInflater inflater = ((Activity) context2).getLayoutInflater(); 
      row = inflater.inflate(R.layout.single_listview_item_birra, parent, false); 
      birraHolder = new BirraHolder(); 
      birraHolder.birraName = (TextView) row.findViewById(R.id.name_birra); 
      birraHolder.birraprezzo = (TextView) row.findViewById(R.id.prezzo_birra); 
      birraHolder.valuta_birra = (TextView) row.findViewById(R.id.valuta_birra); 
      birraHolder.chkBox_birra = (CheckBox) row.findViewById(R.id.chk_box_birra); 
      birraHolder.edit_birra = (EditText) row.findViewById(R.id.editText_birra); 
      birraHolder.edit_birra.setVisibility(View.GONE); 
      birraHolder.edit_birra.setEnabled(false); 
      row.setTag(birraHolder); 
     } else { 
      birraHolder = (BirraHolder) row.getTag(); 
     } 
     final Birra b = birraList.get(position); 

     birraHolder.chkBox_birra.setOnCheckedChangeListener(BirraAdapter.this); 
     final BirraHolder finalHolder = birraHolder; 
     birraHolder.chkBox_birra.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (finalHolder.chkBox_birra.isChecked()) { 
        finalHolder.edit_birra.setVisibility(View.VISIBLE); 
        finalHolder.edit_birra.setEnabled(true); 
        finalHolder.edit_birra.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) { 
          b.setQuantità(finalHolder.edit_birra.getText().toString().trim()); 
         } 
        }); 
       } else { 
        finalHolder.edit_birra.setVisibility(View.GONE); 
        finalHolder.edit_birra.setEnabled(false); 
        finalHolder.edit_birra.setText(null); 
       } 
      } 
     }); 
     birraHolder.birraName.setText(b.getName()); 
     birraHolder.birraprezzo.setText("" + b.getDistance()); 
     birraHolder.valuta_birra.setText("" + b.getValuta()); 
     birraHolder.chkBox_birra.setChecked(b.isSelected()); 
     birraHolder.chkBox_birra.setTag(b); 
     birraHolder.edit_birra.setEnabled(false); 
     return row; 
    } 
    ArrayList<Birra> getBox() { 
     ArrayList<Birra> box = new ArrayList<Birra>(); 
     for (Birra b : birraList) { 
      if (b.selected) 
       box.add(b); 
     } 
     return box; 
    } 
} 

片斷:

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

    ListView lv2; 
    ArrayList<Birra> birraList; 
    BirraAdapter biAdapter; 


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



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

主要

public class MainBirra extends AppCompatActivity{ 


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

     getSupportFragmentManager().beginTransaction(). 

       replace(R.id.fragmentContainer2, new ThreeFragment()).commit(); 



    } 



} 

class Birra { 

    String name; 
    int distance; 
    String quantità; 
    String valuta; 
    boolean selected = false; 



    public Birra(String name, int distance, String valuta) { 
     super(); 
     this.name = name; 
     this.distance = distance; 
     this.valuta = valuta; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getDistance() { 
     return distance; 
    } 

    public void setDistance(int distance) { 
     this.distance = distance; 
    } 

    public boolean isSelected() { 
     return selected; 
    } 

    public void setSelected(boolean selected) { 
     this.selected = selected; 
    } 

    public String getQuantità() { 
     return quantità; 
    } 

    public void setQuantità(String quantità) { 
     this.quantità = quantità; 
    } 
    public String getValuta() { 
     return valuta; 
    } 

    public void setValuta(String valuta) { 
     this.valuta = valuta; 
    } 

} 
+2

對上帝的愛,請格式化你的代碼 –

+0

它得到回收 – Amy

+0

您使用onclicklistener也onCheckListener.May是你的問題here.Please檢查這個 – Rama

回答

0

您需要的複選框的值保存到SharedPrefs,使他們通過持續的應用程序。當你離開活動時, 值會丟失。我建議你使用TinyDB。它很輕,很直接保存在SharedPrefs

0

任何添加下面一行在你menifests文件(兩個片段的)相關活動

<activity 
     android:name=".your_activity_name" 
     android:label="@string/per_care" 
     android:screenOrientation="sensorPortrait" 
     android:launchMode="singleTop" /> 
+0

點擊什麼,意味Android :launchMode = 「singleTop」?當我更改標籤時保存值? – Markella92

+0

當然它會保存你的片段數據 –

+0

在Android清單中,我必須把「android:launchMode =」singleTop「? – Markella92

1

我建議你做的複選框布爾陣列,最初如果用戶檢查數組做數組的位置在真實與adapter.then假值設置。和取消選中複選框使其爲false,然後始終從該布爾數組中設置複選框值。

相關問題