2016-06-23 1 views
0

Ich entwickle eine Android-Anwendung. In diesem, ich habe eine Fragment-Aktivität, die die Ansicht für Adapter-Klasse (MyAdapter erweitert BaseAdapter) in onCreateView Methode erstellt. Es folgt der Code-Snippet in onCreateView -Update Adapter Klassenansicht von einer Fragmentaktivität

mAdapter = new MyAdapter(getActivity(), null, 0); 
    mListView = (AbsListView) view.findViewById(android.R.id.list); 
    mListView.setEmptyView(emptyView); 
    mListView.setAdapter(mAdapter); 

Das Fragment-Aktivität, die MyFragment Klasse empfängt Daten von einer anderen Klasse übertragen wie -

if(intent.getAction().equals(BroadcastHelper.DEPARTURE_TIME)){ 
       Bundle args = intent.getExtras(); 
       if (args != null) { 
        int departure_time = args.getInt("Departure"); 
        updateDepartureTime(departure_time); 
       } 
      } 
      else if(intent.getAction().equals(BroadcastHelper.ARRIVAL_TIME)){ 
       Bundle args = intent.getExtras(); 
       if (args != null) { 
        int arrival_time = args.getInt("Arrival"); 
        updateArrivalTime(arrival_time); 
        } 
      } 



     public void updateDepartureTime(int time){ 
      int d_time = time; 
      } 

     public void updateArrivalTime(int time){ 
      int a_time = time; 
      } 

So werden die Werte von a_time und d_time Notwendigkeit, an die Ansicht gesendet und in der Textansicht der Ansicht aktualisiert. In der MyAdapter-Klasse gibt es eine viewHolder, die die tetxview anzeigt. Wie mache ich es von MyFragment-Klasse

Antwort

0

Verwenden Sie einige Event-Bus-Bibliothek, https://github.com/greenrobot/EventBus oder https://github.com/square/otto. Wenn Ihre Daten aus Sendung aus der gleichen App kommt, Sendung auch

zu Eventbus ändern Wenn Sie Schnittstelle verwenden möchten:

public interface OnChange{ 
    void onDepartureChanged(int value); 
    void onArrivalChanged(int value); 
} 

in Ihnen Aktivität umzusetzen:

@Override 
public void onDepartureChanged(int value) { 
    myAdapter.notifyDataSetChanged() 
} 

@Override 
public void onArriChanged(int value) { 
    myAdapter.notifyDataSetChanged() 
} 

und übergeben Sie es zu Ihrem Fragment, wie zum Beispiel:

myFragment.registerOnValuesChange(this) 

Ein, endlich, wenn rec Wählen im Broadcast:

public void updateDepartureTime(int time){ 
    int d_time = time; 
    onValueListener.onDepratureChanged(d_time) 
} 

public void updateArrivalTime(int time){ 
    int a_time = time; 
    onValueListener.onArrivalChange(a_time) 
} 
+0

Gibt es eine alternative Möglichkeit zu tun – Alb609

+0

Ja, Sie können Schnittstelle als Listener verwenden, wie auf Pritish Antwort beschrieben. –

+0

Können Sie mit Code erklären, wie ich verwenden könnte ... Es wäre hilfreich. Mein Viewholder ist in onbindView(), was eine überschriebene Methode ist – Alb609

0

1) Verwenden Sie Schnittstelle, erweitern Sie es in Ihrem Adapter. und setzen Sie den Wert und notifydatasetchanged(). 2) Schreiben Sie eine Methode in Adapter, die Ihre Ansicht aktualisieren wird.Rufen Sie es von Ihrem Activity in Ihrem Empfänger von Broadcast und rufen Sie die Methode.In dieser Methode dotifydatasetchanged.

+0

Die zweite Möglichkeit, die Sie vorgeschlagen haben, können Sie bitte detaillierter beschreiben. Es wird hilfreich sein – Alb609

+0

Ich bin nicht sicher, welche Art von Daten Sie senden und wie Sie es implementieren ..... aber im Allgemeinen müssen Sie einige Daten an Adapter-Konstruktor senden, die Sie als eine Ansicht verwenden. Machen Sie es zugänglich in der ganzen Klasse. Fügen Sie eine Methode wie mupdate (data) {yourAdapterData = data} hinzu und notifydatasetchanged(). Notify-Methode stellt sicher, dass alle überschriebenen Methoden erneut aufgerufen werden und die neue Arraylist oder die Daten, die Sie an den Adapter senden, überschreiben die erforderlichen Daten. – Pritish

+0

Es ist ein int Daten ... Aber mein Viewholder ist in bindView(). Wie mache ich das. Ist es möglich, dass Sie mir mit Code helfen könnten? Ich habe die andere Antwort nicht verstanden – Alb609

Verwandte Themen