我正在与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