2017-06-08 12 views
0

Ich möchte das ausgewählte Element aus ListView zu einem anderen Listview mit Shared Prefences senden. Ich kann den Artikel speichern, kann diesen Artikel aber nicht in einer anderen Listenansicht sehen. AktivitätsklasseListView zeigt nichts an

TextView textUrun = (TextView) view.findViewById(R.id.textUrun); 
      TextView textFiyat = (TextView) view.findViewById(R.id.textFiyat); 
      String yemek = textUrun.getText().toString(); 
      String fiyat = textFiyat.getText().toString(); 
      DataProvider dataProvider = new DataProvider(yemek,fiyat); 
      list.add(dataProvider); 
      String jsonurun = gson.toJson(list); 
      SharedPreferences sharedPreferences = getSharedPreferences("yemekbilgi", Context.MODE_PRIVATE); 
      SharedPreferences.Editor editor = sharedPreferences.edit(); 
      editor.putString("yemek",jsonurun); 
      editor.apply(); 
      Toast.makeText(getApplicationContext(),"Listeye Kaydedildi",Toast.LENGTH_LONG).show(); 

Dies ist die Liste Klasse, welche Elemente angezeigt werden sollen. Listele1

SharedPreferences sharedPreferences = getSharedPreferences("urun1", Context.MODE_PRIVATE); 
    List<DataProvider> list; 
    String jsonurun = sharedPreferences.getString("liste1", ""); 
    Gson gson = new Gson(); 
    DataProvider[] providers = gson.fromJson(jsonurun, DataProvider[].class); 
    list = Arrays.asList(providers); 
    listDataAdapter = new ListDataAdapter(getApplicationContext(), list); 
    listView = (ListView) findViewById(R.id.liste1); 
    listView.setAdapter(listDataAdapter); 

Schließlich ist dies Adapter Class

public class ListDataAdapter extends ArrayAdapter { 
List list = new ArrayList(); 

public ListDataAdapter(@NonNull Context context,List<DataProvider> list) { 
    super(context, R.layout.be_layout, list); 
} 

static class LayoutHandler{ 
    TextView ad,fiyat; 
} 

@Override 
public void add(@Nullable Object object) { 
    super.add(object); 
    list.add(object); 
} 

@Override 
public int getCount() { 
    return list.size(); 
} 

@Nullable 
@Override 
public Object getItem(int position) { 
    return list.get(position); 
} 

@NonNull 
@Override 
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
    View view = convertView; 
    LayoutHandler layoutHandler; 
    if (view == null){ 
     LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = layoutInflater.inflate(R.layout.child_layout,parent,false); 
     layoutHandler = new LayoutHandler(); 
     layoutHandler.ad = (TextView) view.findViewById(R.id.textUrun); 
     layoutHandler.fiyat = (TextView) view.findViewById(R.id.textFiyat); 
     view.setTag(layoutHandler); 
    } 
    else 
     layoutHandler = (LayoutHandler) view.getTag(); 
    DataProvider dataProvider = (DataProvider) this.getItem(position); 
    layoutHandler.ad.setText(dataProvider.getAd()); 
    layoutHandler.fiyat.setText(dataProvider.getFiyat()); 
    return view; 
} 

}

+0

setzen Sie Ihre Liste 'List ' 'sein notifyDataSetChanged an Adapter und rufen()' –

+0

Sie leere Liste übergeben, siehe meine Antwort bei Ihnen zu beheben –

+0

Sie dies nicht tun muss überschreiben hinzufügen Methode von ArrayAdapter, oder halten Sie ein Arraylist-Feld drin –

Antwort

0
list = new ArrayList<DataProvider>(); 
gson = new Gson(); 
SharedPreferences sharedPreferences = getSharedPreferences("yemekbilgi", Context.MODE_PRIVATE); 
String yemek = sharedPreferences.getString("yemek",""); 
Type type = new TypeToken<List<DataProvider>>(){}.getType(); 
list = gson.fromJson(yemek,type); 
listView = (ListView) findViewById(R.id.liste1); 
listDataAdapter = new ListDataAdapter(getApplicationContext(),R.layout.child_layout,list); 
listView.setAdapter(listDataAdapter); 
+0

'neue ArrayList ();' ist nicht notwendig, da Sie von JSON sowieso laden –

+0

vereinbart @ cricket_007 –

+0

es funktioniert nicht, gleich Problem wird fortgesetzt –

0
list = new ArrayList<DataProvider>(); 
    listView = (ListView) findViewById(R.id.liste1); 
    listDataAdapter = new ListDataAdapter(getApplicationContext(),R.layout.child_layout,list); 
    gson = new Gson(); 

    SharedPreferences sharedPreferences = getSharedPreferences("yemekbilgi", Context.MODE_PRIVATE); 
    String yemek = sharedPreferences.getString("yemek",""); 
    Type type = new TypeToken<List<DataProvider>>(){}.getType(); 
    list.addAll(gson.fromJson(yemek,type)); 
    listView.setAdapter(listDataAdapter); 
    listDataAdapter.notitifyDataSetChanged(); 
+0

Weisen Sie das Listenobjekt nach dem Erstellen der Anzeige nicht neu zu apter, außer Sie wollen den Adapter –

+0

brechen @ cricket_007 danke für bearbeiten –

1

Sie in einer Liste übergeben, aber Sie es nie zugewiesen.

public class ListDataAdapter extends ArrayAdapter<DataProvider> { 
    List<DataProvider> list; // don't assign here 

    public ListDataAdapter(@NonNull Context context, @LayoutRes int resource,List<DataProvider> list) { 
     super(context, resource, list); 
     this.list = list; // see here 
    } 

Es ist erwähnenswert, aber, dass man kann auch nicht die oben tun und entfernen Sie ganz list, add() und getItem(), getCount() Definitionen, dann wird es wahrscheinlich funktionieren.

statt Jegliche Nutzung von list.get(position) sollte getItem(position)

+0

ja, es funktioniert. Vielen Dank :) –

+0

Vergessen Sie nicht, eine Antwort mit dem Häkchen neben einem Beitrag zu akzeptieren –