ViewPager
으로 작업 중이며 및 Fragment B
이 Fragment C
과 통신해야하는 세 개의 조각 Fragment A, Fragment B and Fragment C
이 있습니다. 나는 통신 로직을 구현했다. 그러나 여기에있다 : Fragment B
에서 데이터가 전달 될 때 Fragment C
의 뷰를 새로 고침/업데이트 할 수 없다. Fragment A
과 Fragment C
이 통신해야하는 경우 모두 정상적으로 작동합니다. 전달 된 데이터에 따라보기가 업데이트됩니다.두 조각 사이의 업데이트/새로 고침/통신
Fragment C
여기는 MediaPlayer
입니다. Fragment B
에서 전달 된 미디어 URL을 재생하지만 레이아웃이 변경되었습니다. 누군가 여기서 무슨 일이 일어나는지 말해 주실 수 있습니까? 여기에 내가 지금까지 한 일이다 : popPass
는 MediaInterface
의 인스턴스
조각 위치 모두에서 인터페이스
public interface MediaInterface {
public void onPodCastClick(int position,
ArrayList<HashMap<String, String>> toPass);
}
와 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();
}
}
. 합니다 (ViewPager 구현 됨) MainActivity
@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
또는 호출기의 currentItem이 A 또는 B가 될 때 조각 C를 제거하십시오. 현재 논리를 변경하지 마십시오. – Devrim