我希望每次单击按钮时在共享首选项中添加相同的值

时间:2016-12-15 10:46:21

标签: java android sharedpreferences

我的问题是我有食物清单。当用户按添加按钮添加菜肴时,我将以共享偏好保存此菜肴名称。但是当我按共享偏好两次按同一个菜时,应该显示2个同名的菜。但每次我按同一道菜它只向我展示一道菜。这是我的代码如下。

public class Cafetaria extends AppCompatActivity {


    String title;
    ListView listView;
    View customNav;
    public String value,secdish,thrDish,frthDish;
    public String Drink,Drink2,Drink3,Drink4;
    String selectedDrink;
    Dialog ViewDialog;
    TextView tv_foodtype,tv_drink;
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cafetaria);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        title = getIntent().getStringExtra("option");
        getSupportActionBar().setTitle(title);

        ActionBar actionBar = getSupportActionBar();
        ActionBar.LayoutParams lp = new ActionBar.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT, Gravity.RIGHT | Gravity.CENTER_VERTICAL);
        customNav = LayoutInflater.from(this).inflate(R.layout.food_actionbar_layout, null); // layout which contains your button.

        actionBar.setCustomView(customNav, lp);
        actionBar.setDisplayShowCustomEnabled(true);

        customNav.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                ViewDialog = new Dialog(Cafetaria.this);
                ViewDialog.setContentView(R.layout.activity_order_detail);
                ViewDialog.setTitle("Your Order Details");


                tv_foodtype = (TextView)ViewDialog.findViewById(R.id.nameuser);
                tv_drink = (TextView)ViewDialog.findViewById(R.id.passnum);
                button = (Button)ViewDialog.findViewById(R.id.okBtn);
                ViewDialog.show();

                final SharedPreferences mSharedPreference= PreferenceManager.getDefaultSharedPreferences(getBaseContext());
                value=(mSharedPreference.getString("firstDish", ""));

                Drink=(mSharedPreference.getString("selectedDrinks", ""));
                Drink2=(mSharedPreference.getString("selectedDrinks1", ""));
                Drink3=(mSharedPreference.getString("selectedDrinks2", ""));
                Drink4=(mSharedPreference.getString("selectedDrinks3", ""));

                secdish=(mSharedPreference.getString("secdish", ""));
                thrDish=(mSharedPreference.getString("thirdDish", ""));
                frthDish=(mSharedPreference.getString("fourtDish", ""));


                tv_foodtype.setText("Main Dishes"+ " \n"+value + " \n" + secdish +"\n"+thrDish+"\n"+frthDish);
                tv_drink.setText("Drink"+" \n"+Drink + " \n" + Drink2 +"\n"+Drink3+"\n"+Drink4);
                button.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        ViewDialog.dismiss();


                    }
                });


            }
        });



        listView =(ListView)findViewById(R.id.listView);

        Drawable chic = this.getResources().getDrawable(R.drawable.chicktikka);
        final Drawable plus = this.getResources().getDrawable(R.drawable.plus);
        Drawable minus = this.getResources().getDrawable(R.drawable.minus);

        ArrayList<FoodItemData> listofItem = new ArrayList<>();
        FoodListViewAdapter listViewAdapter= new FoodListViewAdapter(this,R.layout.item_layout,listofItem);
        listView.setAdapter(listViewAdapter);

        listofItem.add(new FoodItemData("Chicken Tikka","spicey chicken tikka with mixures of indian spices",chic,plus,minus));
        listofItem.add(new FoodItemData("Onion Bhaji","spicey chicken tikka with mixures of indian spices",chic,plus,minus));
        listofItem.add(new FoodItemData("Chicken Pizza","spicey chicken tikka with mixures of indian spices",chic,plus,minus));
        listofItem.add(new FoodItemData("Chicken Masala","spicey chicken tikka with mixures of indian spices",chic,plus,minus));

    }

    @RequiresApi(api = Build.VERSION_CODES.HONEYCOMB_MR1)
    public void plusClick(View v)
    {
        if (listView.getPositionForView(v)==0) {


            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Cafetaria.this);
            final SharedPreferences.Editor editor = prefs.edit();


            editor.putString("firstDish","Chicken Tikka");
            AlertDialog.Builder adb = new AlertDialog.Builder(this);
            adb.setTitle("Please Choose your drink");
            final String[] drinks = new String[]{"Coke", "Fanta", "Sprite"};

            final ArrayList<Integer> selectedItems = new ArrayList<Integer>();
            final boolean[] preCheckedItems = new boolean[]{false, false, false};

            adb.setMultiChoiceItems(drinks, preCheckedItems, new DialogInterface.OnMultiChoiceClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                    if (isChecked) {
                        selectedItems.add(which);
                    } else if (selectedItems.contains(which)) {
                        selectedItems.remove(which);
                    }
                }
            });

            //Define the AlertDialog positive/ok/yes button
            adb.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    for (int i = 0; i < selectedItems.size(); i++) {
                        int IndexOfColorsArray = selectedItems.get(i);
                        selectedDrink = Arrays.asList(drinks).get(IndexOfColorsArray);

                        editor.putString("selectedDrinks",selectedDrink);
                        editor.commit();

                    }

                    Toast.makeText(Cafetaria.this, "Your item has been added", Toast.LENGTH_SHORT).show();

                }
            });

            //Define the Neutral/Cancel button in AlertDialog
            adb.setNeutralButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                }
            });
            adb.show();
        }

     else if (listView.getPositionForView(v) == 1) {

            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Cafetaria.this);
            final SharedPreferences.Editor editor = prefs.edit();
            editor.putString("secdish","Onion Bhaji");

            AlertDialog.Builder adb = new AlertDialog.Builder(this);
            adb.setTitle("Choose your Drink");
            final String[] drinks = new String[]{"Coke", "Fanta", "Sprite"};
            final ArrayList<Integer> selectedItems = new ArrayList<Integer>();
            final boolean[] preCheckedItems = new boolean[]{false, false, false};

            adb.setMultiChoiceItems(drinks, preCheckedItems, new DialogInterface.OnMultiChoiceClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which, boolean isChecked) {

                    if (isChecked) {
                        selectedItems.add(which);
                    } else if (selectedItems.contains(which)) {
                        selectedItems.remove(which);
                    }
                }
            });

            //Define the AlertDialog positive/ok/yes button
            adb.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {

                    for (int i = 0; i < selectedItems.size(); i++) {
                        int IndexOfColorsArray = selectedItems.get(i);
                        selectedDrink = Arrays.asList(drinks).get(IndexOfColorsArray);
                        editor.putString("selectedDrinks1",selectedDrink);
                        editor.commit();

                    }

                    Toast.makeText(Cafetaria.this, "Your item has been added", Toast.LENGTH_SHORT).show();

                }
            });
            adb.setNeutralButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    //When user click the neutral/cancel button from alert dialog
                }
            });
            adb.show();
     }


        else if (listView.getPositionForView(v) == 2) {

            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Cafetaria.this);
            final SharedPreferences.Editor editor = prefs.edit();
            editor.putString("thirdDish","Chicken Pizza");

            AlertDialog.Builder adb = new AlertDialog.Builder(this);
            adb.setTitle("Choose your Drink");
            final String[] drinks = new String[]{"Coke", "Fanta", "Sprite"};
            final ArrayList<Integer> selectedItems = new ArrayList<Integer>();
            final boolean[] preCheckedItems = new boolean[]{false, false, false};

            adb.setMultiChoiceItems(drinks, preCheckedItems, new DialogInterface.OnMultiChoiceClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which, boolean isChecked) {

                    if (isChecked) {
                        selectedItems.add(which);
                    } else if (selectedItems.contains(which)) {
                        selectedItems.remove(which);
                    }
                }
            });

            adb.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    for (int i = 0; i < selectedItems.size(); i++) {
                        int IndexOfColorsArray = selectedItems.get(i);
                        selectedDrink = Arrays.asList(drinks).get(IndexOfColorsArray);
                        editor.putString("selectedDrinks2",selectedDrink);
                        editor.commit();

                    }

                    Toast.makeText(Cafetaria.this, "Your item has beed added", Toast.LENGTH_SHORT).show();
                }
            });
            adb.setNeutralButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    //When user click the neutral/cancel button from alert dialog
                }
            });
            adb.show();
        }

        else if (listView.getPositionForView(v) == 3) {

            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Cafetaria.this);
            final SharedPreferences.Editor editor = prefs.edit();
            editor.putString("fourtDish","Chicken Masala");

            AlertDialog.Builder adb = new AlertDialog.Builder(this);
            adb.setTitle("Choose your Drink");
            final String[] drinks = new String[]{"Coke", "Fanta", "Sprite"};
            final ArrayList<Integer> selectedItems = new ArrayList<Integer>();
            final boolean[] preCheckedItems = new boolean[]{false, false, false};

            adb.setMultiChoiceItems(drinks, preCheckedItems, new DialogInterface.OnMultiChoiceClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which, boolean isChecked) {

                    if (isChecked) {
                        selectedItems.add(which);
                    } else if (selectedItems.contains(which)) {
                        //selectedItems.remove(which);
                        selectedItems.add(which);
                    }
                }
            });

            adb.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    for (int i = 0; i < selectedItems.size(); i++) {
                        int IndexOfColorsArray = selectedItems.get(i);
                        selectedDrink = Arrays.asList(drinks).get(IndexOfColorsArray);
                        editor.putString("selectedDrinks3",selectedDrink);
                        editor.commit();

                    }

                    Toast.makeText(Cafetaria.this, "Your item has beed added", Toast.LENGTH_SHORT).show();
                }
            });
            adb.setNeutralButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    //When user click the neutral/cancel button from alert dialog
                }
            });
            adb.show();
        }

 }

    public void minusClick(View v)
    {
        if (listView.getPositionForView(v)==0) {

            final SharedPreferences mSharedPreference= PreferenceManager.getDefaultSharedPreferences(getBaseContext());
            mSharedPreference.edit().remove("firstDish").commit();
            mSharedPreference.edit().remove("selectedDrinks").commit();
            Toast.makeText(Cafetaria.this, "Your Item has been removed", Toast.LENGTH_SHORT).show();
        }

        else if (listView.getPositionForView(v)==1)
        {
            final SharedPreferences mSharedPreference= PreferenceManager.getDefaultSharedPreferences(getBaseContext());
            mSharedPreference.edit().remove("secDish").commit();
            mSharedPreference.edit().remove("selectedDrinks1").commit();
            Toast.makeText(Cafetaria.this, "Your Item has been removed", Toast.LENGTH_SHORT).show();
        }
        else if (listView.getPositionForView(v)==2)
        {
            final SharedPreferences mSharedPreference= PreferenceManager.getDefaultSharedPreferences(getBaseContext());
            mSharedPreference.edit().remove("thirdDish").commit();
            mSharedPreference.edit().remove("selectedDrinks2").commit();
            Toast.makeText(Cafetaria.this, "Your Item has been removed", Toast.LENGTH_SHORT).show();
        }
        else if (listView.getPositionForView(v)==3)
        {
            final SharedPreferences mSharedPreference= PreferenceManager.getDefaultSharedPreferences(getBaseContext());
            mSharedPreference.edit().remove("fourtDish").commit();
            mSharedPreference.edit().remove("selectedDrinks3").commit();
            Toast.makeText(Cafetaria.this, "Your Item has been removed", Toast.LENGTH_SHORT).show();
        }


    }

    @Override
    protected void onResume() {
        super.onResume();
        if (getSupportActionBar() != null){
            getSupportActionBar().setTitle(title);
        }



    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {

            case android.R.id.home:
                this.finish();
                return true;

        }


        return false;

    }

    @Override
    protected void onRestart() {
        super.onRestart();

        final SharedPreferences mSharedPreference= PreferenceManager.getDefaultSharedPreferences(getBaseContext());
        mSharedPreference.edit().remove("firstDish").commit();
        mSharedPreference.edit().remove("selectedDrinks").commit();
        mSharedPreference.edit().remove("selectedDrinks1").commit();
        mSharedPreference.edit().remove("selectedDrinks2").commit();
        mSharedPreference.edit().remove("selectedDrinks3").commit();
        mSharedPreference.edit().remove("secdish").commit();
        mSharedPreference.edit().remove("thirdDish").commit();
        mSharedPreference.edit().remove("fourtDish").commit();


    }


}`

这是我得到的结果。我按这个菜两次,它只显示一次。它应该显示两次相同的菜名。请指南。

enter image description here

1 个答案:

答案 0 :(得分:0)

这里的代码真的很长。但一般来说,你用不同的键值对保存每道菜吗?也许想想这样的解决方案。或者您可以将菜肴存储在一个阵列中,该阵列可以存储在共享的首选项中,一旦您想看到您的菜肴,只需读出阵列列表并显示其中的项目。

只要您想在代码中执行此操作,就可以将String存储到数组中。它就像mArrayList.add("String");一样,然后您可以像现在一样更新yuor SharedPrefs,只需检查有关如何将ArrayList存储到SharedPrefs的URL。在我看来,这将是一个更清洁的解决方案。

在这里,您可以看到如何在SharedPreferences中存储ArrayList: Save ArrayList to SharedPreferences

一旦您想要显示ArrayList中的项目,就可以从SharedPrefs中提取ArrayList并在AlertDialog ListView中显示它们。

这里解释了如何在AlertDialog中显示数组项: How can I display a list view in an Android Alert Dialog?