2016-10-17 6 views
0

У меня есть фрагмент в моей панели действий, и если пользователь нажимает кнопку фрагмента, страница должна автоматически обновляться/обновляться, если в ней есть какое-либо содержимое. Проблема, с которой я сталкиваюсь, заключается в том, что фрагмент не обновляется автоматически в первый раз, но обновляется и обновляется, когда я нажимаю его во второй раз.Фрагмент не обновляется автоматически при нажатии

Это поток:

Выберите фрагмент 1 -> Не обновлять/обновления -> вернуться назад и выбрать другой фрагмент 2 из панели действий -> выбрать фрагмент 1 раз -> Обновление интерфейса фрагмента 1 .

Я вызываю фрагмент 1 из MainActivity в onPostExecute задачи Async.

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

где вы звоните asyntask? – sasikumar

+0

Обновлен ли ваш 'isAdded' boolean при первом вызове? –

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

на вашем фрагменте:

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; 
} 
Смежные вопросы