2016-12-15 4 views
0

Мой вопрос: у меня есть список продуктов питания. когда пользователь нажимает кнопку добавления, чтобы добавить блюдо, я сохраняю это имя в общих предпочтениях. но когда я нажимаю одно и то же блюдо дважды в общем предпочтении, должен показывать 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

ответ

0

код действительно долго следовать здесь. Но, говоря в целом, вы сохраняете каждое блюдо с помощью пары ключей? Может быть, подумайте о таком решении. ИЛИ вы можете хранить посуду в массиве, который можно сохранить в общих префайлах, и как только вы захотите увидеть свои блюда, просто зачитайте список массивов и покажите элементы внутри него.

Вы храните строку в массив, когда хотите сделать это в своем коде. Это точно так же, как mArrayList.add("String");, а затем вы можете обновить yuor SharedPrefs так же, как вы уже сделали, просто проверьте URL-адрес, как хранить ArrayList в SharedPrefs. На мой взгляд, было бы более чистым решением.

Здесь вы можете увидеть, как хранить ArrayList в SharedPreferences: Save ArrayList to SharedPreferences

И когда вы хотите, чтобы отобразить элементы из ArrayList, вы тянете ArrayList из SharedPrefs и отображать их в AlertDialog ListView.

И здесь объясняется, как отобразить Элементы массива в AlertDialog: How can I display a list view in an Android Alert Dialog?

+0

я попробовал этот способ много, но все еще показывает только по пункту. есть ли какой-либо другой способ, который вы можете объяснить с помощью кода, будет огромной помощью. –

+0

Я бы создал ArrayList из String. Когда пользователь выбирает Блюдо, я бы извлек его ID и сохранил название строки в ArrayList. I wuold обновляет общую преференцию после каждого такого появления с обновленным ArrayList. И всякий раз, когда пользователь хочет вытащить информацию из SharedPrefs, я бы вытащил из нее свой ArrayList. Получите его длину и проведите по каждому элементу внутри него и отобразите каждую строку в списке. –

+0

можно объяснить в коде, пожалуйста, будет огромная поддержка. большое спасибо –