2016-10-17 12 views
0

アクションバーにフラグメントがあり、ユーザーがフラグメントボタンをクリックすると、その中にコンテンツがあればページが自動的に更新/更新されます。私が直面している問題は、断片が最初に自動的に更新されるのではなく、2回目にそれを押したときに更新と更新が行われることです。 フラグメントがクリック時に自動的に更新されない

この

が流れている: - >更新しません/リフレッシュ -

選択してフラグメント1>戻って、アクションバーから別のフラグメント2を選択してください - 再びフラグメント1を選択してください> - >は、フラグメント1のUIを更新します

私はAsyncタスクのonPostExecuteのMainActivityからフラグメント1を呼び出しています。

MainActivity、

private final FragmentOne f1 = new FragmentOne(); 

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

私は私のフラグメントクラスでコードのこの部分を持っています。

// 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

? – sasikumar

+0

最初の呼び出しで 'isAdded'ブール値が更新されていますか? –

+0

フラグメントが追加されたときにブール値が正しいかどうかチェックしてください – sasikumar

答えて

2

多分あなたのために働く、これを試してみてください;)

活動に:あなたの断片上

@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); 
    } 

を:

あなたはasyntaskを呼び出す
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; 
} 
関連する問題