2016-08-07 28 views
1

Ich habe 3 Fragmente.ArrayList zeigt nur 1 Element in SharedPreferences an

Das erste Fragment wird verwendet, um einen Listview anzuzeigen.

Das zweite Fragment zeigt an, was der Benutzer angeklickt hat 1. Fragment folgt mit einem Knopf (in den Warenkorb).

Das dritte Fragment wird verwendet, um die Gesamtzahl der Produkte anzuzeigen, die dem Warenkorb hinzugefügt werden.

ich viele Male der verschiedenen Produkte hinzugefügt haben, jedoch nur das letzte Element anzuzeigen In den Warenkorb hinzugefügt, zeigten die übrigen Produkte, die nicht in der Listenansicht

display_listview.java

public class display_listview extends Fragment { 

String[] mobileArray = {"Android","IPhone","WindowsMobile","Blackberry","WebOS","Ubuntu","Windows7","Max OS X"}; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 

    View v=inflater.inflate(R.layout.fragment_display_listview, container, false); 

    ListView listView = (ListView)v.findViewById(R.id.lv); 
    ArrayAdapter adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, mobileArray); 
    listView.setAdapter(adapter); 
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 


      String product_name=adapterView.getItemAtPosition(i).toString(); 

      product_details my_alert=new product_details(); 
      my_alert.show(getActivity().getSupportFragmentManager(),""); 

      Bundle bundle = new Bundle(); 
      bundle.putString("name",product_name); 
      my_alert.setArguments(bundle); 

     } 
    }); 

    Button get_button=(Button)v.findViewById(R.id.cart); 
    get_button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      FragmentManager manager=getActivity().getSupportFragmentManager(); 
      FragmentTransaction transaction=manager.beginTransaction(); 
      my_cart list=new my_cart(); 
      transaction.replace(R.id.top,list); 
      transaction.addToBackStack("wtf"); 
      transaction.commit(); 
     } 
    }); 
    return v; 
} 
} 

show_product.java

public class show_product extends DialogFragment { 

LayoutInflater inflater; 
View v; 
ArrayList<String> products_clicked=new ArrayList<String>(); 

public Dialog onCreateDialog(Bundle savedInstanceState) { 

    inflater=getActivity().getLayoutInflater(); 
    v=inflater.inflate(R.layout.fragment_product_details,null); 

    TextView get_text=(TextView)v.findViewById(R.id.text); 

    Bundle bundle = getArguments(); 
    final String name= bundle.getString("name"); 
    get_text.setText(name); 

    AlertDialog.Builder build=new AlertDialog.Builder(getActivity()); 

    build.setView(v).setPositiveButton("Add to cart", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 

      SharedPreferences preferences = getActivity().getSharedPreferences("order_list", Context.MODE_PRIVATE); 
      SharedPreferences.Editor editor=preferences.edit(); 

      products_clicked.add(name); 
      Set<String> set = new HashSet<String>(); 
      set.addAll(products_clicked); 

      editor.putStringSet("yourKey", set); 
      editor.commit(); 

      Toast.makeText(getActivity(),name +" has added to cart.", Toast.LENGTH_LONG).show(); 
     } 
    }); 
    return build.create(); 

} 
} 

my_cart.java

public class my_cart extends Fragment { 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View v=inflater.inflate(R.layout.fragment_my_cart, container, false); 

    SharedPreferences preferences = getActivity().getSharedPreferences("order_list", Context.MODE_PRIVATE); 

    Set<String> set = preferences.getStringSet("yourKey", null); 
    List<String> sample=new ArrayList<String>(set); 
    ArrayAdapter adapter1 = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, sample); 
    ListView listView1 = (ListView)v.findViewById(R.id.listView); 
    listView1.setAdapter(adapter1); 

    return v; 
} 
} 

Bitte lesen Sie den Screenshot

enter image description here

+0

Sind Sie sicher, dass Sie show_product in Ihrer Klasse display_listview aufrufen? Ich kann nur sehen, dass product_details zur Anzeige eines Alarms verwendet wird. – fluffyBatman

+0

Bei einem anderen Thema muss der Name einer Java-Klasse mit einem Großbuchstaben beginnen. – fluffyBatman

+0

ich verstehe nicht, was meinst du, aber bis jetzt meine Codierung ist ok, außer das Problem, das ich oben erwähnte – gosulove

Antwort

2

Es ist, weil die product_clicked eine Instanzvariable ist und halten nicht Ihren zuvor Elemente hinzugefügt.

Ändern Sie die onClick() Methode in show_product Klasse wie folgt:

@Override 
public void onClick(DialogInterface dialogInterface, int i) 
{ 
    SharedPreferences preferences = getActivity().getSharedPreferences("order_list", Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor=preferences.edit(); 

    Set<String> set = preferences.getStringSet("yourKey", new HashSet<String>()); 
    set.add(name); 

    editor.putStringSet("yourKey", set); 
    editor.commit(); 

    Toast.makeText(getActivity(),name +" has added to cart.", Toast.LENGTH_LONG).show(); 
} 

Wie Sie sehen können, wir die vorher gespeicherten Satz in SharedPreferences, fügen Sie das neue Element und speichern sie wieder holen.

+0

thx! Nach dem Wechsel zu dem, was Sie vorgeschlagen haben, funktioniert es, aber ein anderes Problem tritt auf. Wenn ich die Apps schließe und neu starte, wenn ich "Mein Warenkorb" zum ersten Mal anschaue, wird immer "WindowsMobile" für den ersten Artikel angezeigt (Ich habe nicht auf In den Warenkorb klicken geklickt). Irgendeine Idee was ist los? – gosulove

+0

'SharedPreferences' speichert Daten dauerhaft. Es ist da, weil Sie das bei früheren Starts in den Warenkorb gelegt haben. Willst du das nicht? Wenn Sie nicht möchten, dass Daten für die nächsten Starts gespeichert werden, verwenden Sie "SharedPreferences" überhaupt nicht. Verwenden Sie Ihren vorherigen Code, aber machen Sie 'products_clicked' statisch. – Mousa

+0

ok. Übrigens frage ich mich, ob ich die richtige Methode benutzt habe, um einen Einkaufswagen zu machen? Ich möchte den Artikel im Warenkorb speichern, indem ich SharedPreferences benutze. – gosulove