Android에서 v4 호환성 ViewPager를 사용하고 있습니다. 내 FragmentActivity에는 ViewPager의 다른 페이지에 다른 방식으로 표시되는 많은 데이터가 있습니다. 지금까지는 동일한 ListFragment의 인스턴스가 3 개 있지만 앞으로는 다른 ListFragments의 인스턴스가 3 개 있습니다. ViewPager는 수직 전화기 화면에 있으며 목록은 나란히 없습니다.
이제 ListFragment의 버튼은 FragmentActivity를 통해 별도의 전체 페이지 활동을 시작합니다. FragmentActivity는 데이터를 반환하고 FragmentActivity가 데이터를 수정하고 저장 한 다음 ViewPager의 모든보기를 업데이트하려고 시도합니다. 내가 붙어있는 곳입니다.
public class ProgressMainActivity extends FragmentActivity
{
MyAdapter mAdapter;
ViewPager mPager;
@Override
public void onCreate(Bundle savedInstanceState)
{
...
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.viewpager);
mPager.setAdapter(mAdapter);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
...
updateFragments();
...
}
public void updateFragments()
{
//Attempt 1:
//mAdapter.notifyDataSetChanged();
//mPager.setAdapter(mAdapter);
//Attempt 2:
//HomeListFragment fragment = (HomeListFragment) getSupportFragmentManager().findFragmentById(mAdapter.fragId[0]);
//fragment.updateDisplay();
}
public static class MyAdapter extends FragmentPagerAdapter implements
TitleProvider
{
int[] fragId = {0,0,0,0,0};
public MyAdapter(FragmentManager fm)
{
super(fm);
}
@Override
public String getTitle(int position){
return titles[position];
}
@Override
public int getCount(){
return titles.length;
}
@Override
public Fragment getItem(int position)
{
Fragment frag = HomeListFragment.newInstance(position);
//Attempt 2:
//fragId[position] = frag.getId();
return frag;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE; //To make notifyDataSetChanged() do something
}
}
public class HomeListFragment extends ListFragment
{
...
public static HomeListFragment newInstance(int num)
{
HomeListFragment f = new HomeListFragment();
...
return f;
}
...
보시다시피, 첫 번째 시도는 전체 FragmentPagerAdapter에 대해 DataSetChanged를 알리는 것이 었으며 때때로 데이터를 업데이트하는 것으로 나타 났지만 다른 경우에는 IllegalStateException이 발생했습니다. onSaveInstanceState 후에이 작업을 수행 할 수 없습니다.
두 번째 시도는 내 ListFragment에서 업데이트 함수를 호출하려고 시도했지만 getItem의 getId는 0을 반환했습니다.
findFragmentById () 또는 findFragmentByTag ()를 사용하여 FragmentManager에서 Fragment에 대한 참조 확보
하지만 내 조각의 태그 또는 ID를 모르겠습니다! ListFragment 레이아웃에서 ViewPager 용 android : id = "@ + id / viewpager"및 ListView 용 android : id = "@ android : id / list"가 있지만 유용하다고 생각하지 않습니다.
그래서, 어떻게 할 수 있습니까? a) 전체 ViewPager를 한 번에 안전하게 업데이트하십시오 (이상적으로 사용자를 이전에 있던 페이지로 되돌아가는 것)-사용자가보기 변경 사항을 볼 수 있습니다. 또는 b) 영향을받는 각 ListFragment에서 함수를 호출하여 ListView를 수동으로 업데이트하십시오.
도움을 주시면 감사하겠습니다.
null
조각을 얻는다 .