Я работаю с ViewPager
и у меня есть три фрагмента Fragment A, Fragment B and Fragment C
, в которых Fragment A
и Fragment B
должны общаться Fragment C
. Я реализовал логику связи, но вот что: я не могу обновить/обновить представление Fragment C
, когда данные передаются от Fragment B
. Все работает нормально, когда 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 ... но они не упомянули способ обновления пользовательского интерфейса.
спасибо, что посмотрели. сделал много вещей ясным. но как мне обновить C? –
Вы можете объявить свойство своей деятельности, например mediaPosition. Обновите его из фрагментов A и B, когда щелчок происходит с помощью метода. Затем напишите свою логику о своей деятельности: если найден фрагмент C, просто установите его медиапозицию в mediaPosition, а затем вызовите пейджеры setCurrentItem. При возобновлении фрагмента C воспроизведите медиа. Если C не найден, перейдите в медиа-позицию, чтобы фрагментировать C и добавьте C. В режиме возобновления он может воспроизводить ваши медиафайлы. – Devrim
Или удалите фрагмент C, когда ваш currentItem на пейджере станет A или B. И не изменяйте свою текущую логику. – Devrim