我正在與ViewPager
和我有三個片段Fragment A, Fragment B and Fragment C
其中Fragment A
和Fragment B
要溝通Fragment C
。我已經實現了通信邏輯,但這裏是這樣的:當數據從Fragment B
傳遞時,我無法刷新/更新Fragment C
的視圖。一切正常,當Fragment A
和Fragment C
要溝通:視圖根據傳遞的數據進行更新。更新/刷新/溝通兩個片段
Fragment C
這是一個MediaPlayer
...它播放從Fragment B
溝通的媒體網址,但佈局有變化。有人可以告訴我這裏發生了什麼。下面是我做了什麼至今:
接口
public interface MediaInterface {
public void onPodCastClick(int position,
ArrayList<HashMap<String, String>> toPass);
}
在這兩個片段A和B
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// TODO Auto-generated method stub
String title = data.get(position).get("Title").toString();
SM.setCurrentPlayedID(title);
popPass.onPodCastClick(position, data);
}
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
try{
popPass = (MediaInterface)getActivity();
} catch(ClassCastException e){
Log.i(tag, "Activity " + getActivity().getClass().getSimpleName()
+ " does not implement the MediaInterface");
e.printStackTrace();
}
}
其中popPass
是MediaInterface
的一個實例。
在MainActivity(其中ViewPager被實現)
@Override
public void onPodCastClick(int position,
ArrayList<HashMap<String, String>> toPass) {
// TODO Auto-generated method stub
Bundle element = new Bundle();
element.putSerializable("toPass", toPass);
element.putInt("position", position);
Fragment toGo = new FragmentC();
toGo.setArguments(element);
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
transaction.add(toGo, "FragmentC").commit();
pager.setCurrentItem(FRAGMENT_C);
}
在C片段
Bundle element = getActivity().getSupportFragmentManager()
.findFragmentByTag("FragmentC").getArguments();
那裏有根據在包中的元素在視圖中所做的更改。
請你幫我弄清楚發生了什麼,我如何刷新此片段。
我還沒有看到這從android developers documentation ...但他們沒有提到的方式來更新UI。
謝謝你的解釋。弄清了很多事情。但我該如何更新C? –
您可以在您的活動中聲明一個屬性,例如mediaPosition。用方法點擊時,從片段A和B更新它。然後在您的活動中編寫您的邏輯:如果找到片段C,只需將其媒體位置設置爲mediaPosition,然後調用尋呼機setCurrentItem。在你的片段的簡歷C播放你的媒體。如果C沒有被發現傳遞媒體位置片段C並添加C.在恢復它可以播放你的媒體。 – Devrim
或者當你在pager上的currentItem變成A或B時刪除你的C片段。並且不要改變你當前的邏輯。 – Devrim