2016-05-04 5 views
1

Ich habe eine Aktivität, bei der ein Klick auf die Schaltfläche ein Bündel von Benutzereingabedaten in einer SQLite-Datenbank speichert, die dann ein CardView in einer RecyclerView-Liste auffüllt. Ich möchte einen Zähler erstellen, der mit einem Standardwert von Null beginnt und bei jedem Klicken auf die Schaltfläche "Speichern" (ein neues CardView wird erstellt) um +1 erhöht und dann in der RecyclerView-Liste an den CardView ausgegeben wird.Android: Wie stelle ich einen SharedPreferences-Zähler auf ein RecyclerView TextView ein?

Ich bekomme und Android Studio Fehler in der Adapter-Datei in der OnBindViewHolder-Methode, in der letzten Zeile, wo es beginnt "Halter ..." Wie würde ich den Kontext von der Aktivität in die Adapter-Datei? Ich dachte, getSharedPreferences() erlaubt globalen Kontext, während getPreferences() würde nicht funktionieren.

ich den Zähler mit SharedPreferences in der Aktivitätsdatei mit der Schaltfläche klicken auf:

public class Activity extends AppCompatActivity { 
... 
    public void onClickSave(View v) { 
    ... 
    int totalcount = 0; 
    SharedPreferences sp = getSharedPreferences("Share_Prefs",Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = sp.edit(); 
    editor.putInt("int_key", ++totalcount); 
    editor.apply(); 

Die Datei RecyclerView Adapter hat den folgenden Code:

public class Adapter extends RecyclerView.Adapter<Adapter.ListViewHolder> { 
    .... 
    Context context; 
    .... 
    public Adapter(Context context, List<UserData> dbList) { 
    this.context = context; 

    public class ListViewHolder extends RecyclerView.ViewHolder { 

     TextView cardBlankTextNums; 

     public ListViewHolder(View itemView) { 
     super(itemView); 

     cardBlankTextNums = (TextView)itemView.findViewById(R.id.cardBlankTextNums); 

     @Override 
     public int getItemCount() { 
      return dbList.size(); 
     } 

    @Override 
    public void onBindViewHolder(final ListViewHolder holder, final int position) { 

    int totalcount = 0; 

    holder.cardBlankTextNums.setText(dbList.get(position).getSharedPreferences.edit.getInt("int_key",totalcount));  
+0

dbList.get (Position) .getSharedPreferences ... die Syntax ist falsch – Pooya

+0

Ok irgendwelche Gedanken über die richtige Syntax? – AJW

+0

Ich werde eine Antwort unter – Pooya

Antwort

0

getSharedPreferences Arbeiten auf einem Context und seit Ihr Adapter hat keinen, der Name kann nicht aufgelöst werden, also müssen Sie den Kontext an Ihre Adapterklasse weitergeben. Es ist die beste es im Konstruktor zu tun:

public class Adapter extends RecyclerView.Adapter<Adapter.ListViewHolder> { 

    private Context mContext; 

    public Adapter (Context context) 
    { 
     mContext = context; 
    } 

    ... 

public void onBindViewHolder(final ListViewHolder holder, final int position) { 

    holder.cardBlankTextNums.setText(mContext.getSharedPreferences("Share_Prefs",Context.MODE_PRIVATE).getInt("int_key",totalcount)); 

Und wenn Sie einen neuen Adapter instanziert werden wollen, müssen Sie den Kontext zu übergeben. Wenn Sie zum Beispiel in der Tätigkeit sind Sie tun müssen:

Adapter newAdapter = new Adapter(this); 

Wenn Sie in einem Fragment sind was Sie tun müssen:

Adapter newAdapter = new Adapter(getActivity()); 
+0

posten Also benötigt der setText nicht die CardView-Position mit "dbList.get (Position) ..."? – AJW

+0

@AJW persönlich Ich bin mir nicht sicher, welche Logik Sie verwenden, aber GetSharedPreferences gibt eine feste Zahl unabhängig von der Position Ihrer Ansichten – Pooya

+0

Ich habe den Kontext übergeben, habe ich vergessen zu berücksichtigen. Ich werde den obigen Code bearbeiten, um ihn anzuzeigen. – AJW

Verwandte Themen