2014-06-13 111 views
0

我想修改片段1中的視圖從其他fragment2,父級的fragment1,調用片段1的公共方法,但不起作用。修改其他片段內的片段內的視圖不起作用

在容器片段一個做到這一點:

AddressEditSubviewFragment profesionalEditFragment = new AddressEditSubviewFragment(); 
     notificationsEditFragment = new AddressEditSubviewFragment(); 
     fragmentTransaction.add(R.id.addresses_edit_fragment_notifications_edit_fl, notificationsEditFragment); 
fragmentTransaction.commit(); 

CheckBox notCB = (CheckBox) view.findViewById(R.id.addresses_edit_fragment_notifications_same_cb); 
     notCB.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       notificationsEditFragment.disableEnableEdit(true); 

      } 
     }); 

在片段的方法,改變的視圖的狀態是這樣的:

public void disableEnableEdit(boolean disable) { 

     streetET.setKeyListener(null); 
     streetET.setCursorVisible(false); 
     streetET.setPressed(false); 
     streetET.setFocusable(false); 
     numberET.setFocusable(!disable); 
     numberET.setEnabled(!disable); 
     numberET.setText("pruebas"); 
     floorET.setVisibility(View.GONE); 
     buildingET.setFocusable(!disable); 
     buildingET.setEnabled(!disable); 
     pcET.setFocusable(!disable); 
     pcET.setEnabled(!disable); 



    } 

當我調用從容器片段的方法它進入方法,但不會改變任何東西。爲什麼會發生這種事情?

回答

0

最後,我發現了這個問題。問題是我有兩個cheboxes父母片段中相同的id。而當我檢查複選框時效果不佳。對不起,這個問題。

1

你不能也不應該有片段直接相互溝通。它們之間的所有通信都必須經過活動或父代片段(如果它們承載了這兩者)。

有幾種方法可以做到這一點。 here's one method

我個人比較喜歡broadcastreceivers。方法基本上是:

  1. 有fragment1調用activity中的某個方法。
  2. 當完成後,該方法是否在某個意向過濾器上發送了廣播。
  3. 在fragment2上實現一個廣播接收器,它在接收廣播時做了一些事情。
  4. 請按照您的意願(通常在onResume和onPause上完成)使fragment2註冊並取消註冊所述意圖過濾器上的接收器。

告訴我如果我的解釋不夠清楚,我會提供一個有效的代碼示例。

祝你好運! :)

---編輯---

好,理解你試圖調用從其父片段孩子片段的方法後,在這裏與廣播接收機的方法,應該工作:

無論何時您需要調用子片段中的方法,父片段都會在某個意向過濾器上發送廣播。

Intent intent = new Intent(); 
intent.setAction(some_string); 
getActivity().sendBroadcast(intent); 

實現子片段的廣播接收器,調用其onReceive()該方法。

BroadcastReceiver receiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     doStuff(); 
    } 
}; 

登記接收到子片段的onResume()的意圖過濾器,並在孩子的onPause()註銷它。

getActivity().registerReceiver(receiver, new IntentFilter(some_string)); 
getActivity().unregisterReceiver(receiver); 
+0

我嘗試修改te fragmento 1的片段是他的父代片段。我改變了這個問題,因爲我不太清楚 –

+0

啊是的,我曾嘗試過這樣的事情,並遇到了問題。我編輯了我的答案並添加了一個適用於我的代碼示例。祝你好運! :) – orenk86

+0

但問題不是該方法沒有調用。當y調用方法時,它會進入方法但de view不會更新 –