【问题标题】:why checkbox are not selected if i click on another tab?如果我单击另一个选项卡,为什么不选中复选框?
【发布时间】:2016-05-06 11:58:32
【问题描述】:

当我在页面查看器上停留在选项卡上并选择一个复选框时,当我单击另一个选项卡时,我之前选择的复选框没有被选中....为什么?

我希望你能帮助我。

谢谢大家!!!!!!

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

}

【问题讨论】:

  • 看在上帝的份上,请格式化您的代码
  • 它正在被回收
  • 您正在使用 onclicklistener 和 onCheckListener。可能是您的问题在这里。请检查此
  • @Rama 我使用 onCheckedChange 赚取我点击复选框

标签: android listview android-fragments android-studio android-viewpager


【解决方案1】:

我建议您为复选框创建一个布尔数组,并在适配器中将其初始设置为假值。然后如果用户检查该数组,则使数组的位置为真。并在取消选中复选框时将其设为 false。然后始终从该布尔数组中设置复选框值。

【讨论】:

    【解决方案2】:

    您需要将 CheckBoxes 值保存到 SharedPrefs 以使它们在应用程序中持久存在。 当您离开活动时,值会丢失。

    我建议您使用TinyDB。将任何内容保存在SharedPrefs

    【讨论】:

      【解决方案3】:

      在您的 menifests 文件中为 相关活动(两个片段的)添加以下行。

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

      【讨论】:

      • android:launchMode="singleTop" 是什么意思?当我更改标签时保存值?
      • 在我必须放置“android:launchMode="singleTop"的android清单中?
      • 我使用片段,我在 android manifest.xml 中没有片段
      • 您的片段与哪个活动相关?
      • 我写了“ " 但没有工作
      猜你喜欢
      • 1970-01-01
      • 2018-03-22
      • 1970-01-01
      • 2021-02-26
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 2021-12-24
      相关资源
      最近更新 更多