2016-03-31 3 views
3

Ich habe zwei Klassen, eine Adapter-Klasse für meine Fragment-Aktivität und eine Voting-Klasse. Ich rufe die Voting-Klasse in meiner Adapterklasse an, wenn ein Benutzer eine Schaltfläche drückt. Allerdings habe ich auch eine JSON-Anfrage und eine Parse-Methode in meiner Fragmentaktivität, wie unten gezeigt, und ich möchte nur die "Stimmen" aktualisieren, wenn die Schaltfläche ist gedrückt Wie kann ich das tun?Wie kann ich wählen, um eine bestimmte Ansicht mit einer JSON-Anfrage zu aktualisieren

private ArrayList<QuestionData> parseJSONResponseQuestion(JSONArray response) { 
    if (!response.equals("")) { 
     ArrayList<QuestionData> questionDataArrayList = new ArrayList<>(); 
     try { 
      StringBuilder data = new StringBuilder(); 
      for (int i = 0; i < response.length(); i++) { 
       JSONObject currentQuestions = response.getJSONObject(i); 
       String text = currentQuestions.getString("text"); 
       String votes = currentQuestions.getString("votes"); 
       int voteInt=Integer.parseInt(votes); 
       QuestionData questionData = new QuestionData(); 
       questionData.setMtext(text); 
       questionData.setVotes(votes); 
      } 
      System.out.println(data.toString()); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

    return mListblogs; 
} 
+0

schreiben ein kleines Detail mehr –

+0

Sind Sie fragen das Listview-Daten mit dem json zu aktualisieren? es ist schwer zu verstehen, was Sie versuchen zu erreichen – Nanoc

+0

ist es ein Recyclerview – eli

Antwort

0

Ich gehe davon aus Sie einen LinearLayoutManager für Ihre RecyclerView verwenden.

Übergeben Sie die Klickposition von Ihrem ViewQuestion'sonClick() auf Ihre onUpVote() und onDownVote() Methoden.

Von den onUpVote() und onDownVote() Methoden, Posten Broadcast Spezifizierungs was auch immer Daten in Ihrem intent.putExtras und auch die Klickposition umfasst.

Jetzt auf Ihrem Activity, schreiben Sie eine BroadcastReceiver, die die broadcasts von den onUpVote() oder onDownVote() Methoden gesendet einfängt. Rufen Sie jetzt Ihre LinearLayoutManager.findViewByPosition(position) Methode von Activity auf, um eine Referenz auf Ihre View zu erhalten, auf die geklickt wurde. Jetzt können Sie findViewById() Methode verwenden, um Ihre erforderliche view zu finden und die Werte zu aktualisieren.

+0

Alter, das ist keineswegs eine effiziente Möglichkeit, dies zu tun – eli

+0

Schreiben Sie einen Rundfunkempfänger? Komm schon mann – eli

+0

Hallo Eli. Nun, es ist nicht so ineffizient wie du denkst. Ich denke, du hast die Idee, dass es sonst schwierig ist, mit Aktivitäten zu kommunizieren! Das ist das Einzige, was mir in den Sinn kam! Lol! –

1

Zuerst sollten Sie eine Methode in Ihren Adapter für die Aktualisierung einzelner QuestionData hinzufügen. Zum Beispiel:

public void setBlogItem(int index, QuestionData questionData) { 
    if (mListblogs.get(index).getVotes() != questionData.getVotes()) { 
     mListblogs.set(index, questionData); 
     notifyItemChanged(index); 
    } 
} 

Sekunde. Frage aktualisieren Dazu müssen Sie den Index des Artikels kennen. Ich schlage vor, dass sich die ganze Liste nicht ändert. Also, ändern Sie Ihre JSON-Parser:

private ArrayList<QuestionData> parseJSONResponseQuestion(JSONArray response) { 
    if (!response.equals("")) { 
     ArrayList<QuestionData> questionDataArrayList = new ArrayList<>(); 
     try { 
      StringBuilder data = new StringBuilder(); 
      for (int i = 0; i < response.length(); i++) { 
       JSONObject currentQuestions = response.getJSONObject(i); 
       String text = currentQuestions.getString("text"); 
       String votes = currentQuestions.getString("votes"); 
       int voteInt=Integer.parseInt(votes); 
       QuestionData questionData = new QuestionData(); 
       questionData.setMtext(text); 
       questionData.setVotes(votes); 
       recyclerAdapter.setBlogItem(i, questionData); /// Put attention here! 
      } 
      System.out.println(data.toString()); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

    return mListblogs; 
} 
0

Klingt wie Ihre Anwendung braucht ein bisschen Architektur Arbeit. Haben Sie in Betracht gezogen, die Verwendung von JSON nur dann einzuschränken, wenn Sie die Daten in einer Datei oder einem Netzwerk oder etwas Ähnlichem lesen oder schreiben müssen? Wenn Sie JSON in Ihrem Modell mischen, schreiben Sie möglicherweise viel mehr Code als Sie benötigen.

Nur so ein Gedanke ...

Verwandte Themen