2016-10-17 123 views
0

我在我的操作栏中有一个片段,如果用户单击片段按钮,页面应该自动更新/刷新,如果其中有任何内容。我面临的问题是,片段不会自动更新第一次,而是在第二次按下时更新和刷新。片段不会自动更新点击

这是流量:

选择片段1 - >不更新/刷新 - >返回并从操作栏中选择其他片段2 - >再次选择片段1 - >更新片段1的UI 。

我在异步任务的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

,你叫asyntask? – 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); 
    } 

在您的片段:

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