2016-10-17 1 views
0

Ich habe ein Fragment in meiner Aktionsleiste und wenn der Benutzer auf die Fragment-Schaltfläche klickt, sollte die Seite automatisch aktualisiert/aktualisiert werden, wenn darin Inhalte enthalten sind. Das Problem, mit dem ich konfrontiert bin, ist, dass das Fragment beim ersten Mal nicht automatisch aktualisiert wird, sondern aktualisiert und aktualisiert wird, wenn ich es das zweite Mal drücke.Fragment aktualisiert sich nicht automatisch beim Klicken auf

Dies ist der Fluss:

1 Wählen Sie Fragment -> nicht aktualisiert/Refresh -> zurück gehen und ein weiteres Fragment 2 von Aktionsleiste wählen -> wählen Fragment 1 wieder -> Aktualisiert das UI von Fragment 1 .

Ich rufe das Fragment 1 von MainActivity in der OnPostExecute einer Async-Aufgabe.

MainActivity,

private final FragmentOne f1 = new FragmentOne(); 

@Override 
     protected void onPostExecute(Object o) { 
      super.onPostExecute(o); 
      f1.updateUI(); 
     } 

Ich habe dieses Stück Code in meiner Fragment-Klasse.

// Updates the fragment-1 UI 
public void updateUI() { 
    if (isAdded()) { 
     String currentDatabaseName = null; 
     hideAllTables(); 
     hideWarningLabelsAndHeaders(); 
     progressBarIndicator.setVisibility(View.VISIBLE); 

     if (null != getUserIdentifier()) { 
      currentDatabaseName = Utils.buildUserDataFromFli(getUserIdentifier()); 
     } 
     if (null != currentDatabaseName) { 
      shopData = new ShopDao(ShopApplication.getLoggedInUser(), Utils.getDatabaseIndexMap()); 
      transcationData = new TranscationDao(ShopApplication.getLoggedInUser(), Utils.getDatabaseIndexMap()); 
     } 
     configureUserDependentFetchers(getUserIdentifier()); 
    } 
} 
+0

wo Sie asyntask nennen? – sasikumar

+0

Ist Ihr 'isAdded' Boolean beim ersten Aufruf aktualisiert? –

+0

Überprüfen Sie, ob der Boolesche Wert korrekt ist oder nicht, wenn das Fragment hinzugefügt wurde – sasikumar

Antwort

2

versuchen diese, vielleicht für Sie arbeiten;)

Auf Aktivität:

@Override 
    protected void onPostExecute(Object o) { 
     super.onPostExecute(o); 
     //to send broadcast for refresh 
     Intent intentRefresh = new Intent("com.yourapp.REFRESH_DATA"); 
     LocalBroadcastManager.getInstance(YourActivity.this).sendBroadcast(intentRefresh); 
    } 

auf Ihrem Fragment:

private final BroadcastReceiver broadcastReceiverMap = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     if (action.equals("com.yourapp.REFRESH_DATA")) { 
      //put here code for refresh 
     } 
    } 
}; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_one, container, false); 

    //register your LocalBroadcatManager 
    IntentFilter intentFilter = new IntentFilter(); 
    intentFilter.addAction("com.yourapp.REFRESH_DATA"); 
    LocalBroadcastManager.getInstance(getActivity()).registerReceiver(
      broadcastReceiverMap, intentFilter); 
    return view; 
} 
Verwandte Themen