2013-05-19 2 views
0

현재 조각을 사용하려고하지만 현재 해결할 수없는 문제가 있습니다.FragmentAdapter에 조각에 대한 좋은 참조가 없습니다.

나는 4 개의 다른 단편을 보유하고있는 하나의 활동을 가지고 있습니다. 이 활동에서 웹으로 이동하여 필요한 다른 데이터를 얻은 ASyncTask를 시작한 다음이를 파편으로 보냅니다.

그러나 내 앱이 죽거나 다시 열리거나 방향을 바꿀 때 조각이 분명히 다시 만들어지고 사용자 정의 FragmentAdapter는 조각에 대한 좋은 참조를 보유하지 않습니다.

다음은 내 주요 활동 코드입니다.

public class MainActivity extends FragmentActivity { 
    MyPagerAdapter fgsAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     //... 
     FragmentManager fm = super.getSupportFragmentManager(); 
     fgsAdapter = new MyPagerAdapter(fm,this); 
     ViewPager myPager = (ViewPager) findViewById(R.id.home_pannels_pager); 
     myPager.setAdapter(fgsAdapter); 
     myPager.setCurrentItem(0); 
    } 
    @Override 
    protected void onResume() { 
     super.onResume(); 
     ATaskGetUser task = new ATaskGetUser(callback, (ProgressBar) findViewById(R.id.PB_AsyncTask)); 
     task.execute(); 
    } 
    //What's called by the ASyncTask onPostExecute() 
    private void notifyDataChanged() { 
     fgsAdapter.notifyFragments(user.getItems()); 
    } 

    private class MyPagerAdapter extends FragmentPagerAdapter { 
     private List<CardFragment> fragments = new ArrayList<CardFragment>(); 
     private Context c; 

     public MyPagerAdapter(FragmentManager fm, Context c) { 
      super(fm); 
      CardFragment h = new HabitFragment(); 
      CardFragment d = new DailyFragment(); 
      CardFragment t = new ToDoFragment(); 
      CardFragment r = new RewardFragment(); 
      fragments.add(h); 
      fragments.add(d); 
      fragments.add(t); 
      fragments.add(r); 
     } 
     public int getCount() { 
      return fragments.size(); 
     } 

     @Override 
     public CardFragment getItem(int position) { 
      Log.v("MainActivity_fgsmanager", "getItem()"); 
      CardFragment f = (CardFragment) this.fragments.get(position); 
      return f; 
     } 
     public void notifyFragments(List<HabitItem> items) { 
      for(OnTasksChanged f : fragments) { 
       f.onChange(items); 
      } 
     } 
    } 
} 

그래서, 내가 할 수 있기를 원하는, 내 notifyDataChanged 기능에 onchange를 (내 네 조각으로 구현 된 인터페이스)를 호출 할 수있다. 이것이 가능한가, 내가 잘못된 생각을하고 있는가?

답변

0

Fragments에서 한 번 같은 문제가 발생했습니다. 화면이 회전 할 때마다 현재 조각이 손실되었습니다.

앱이 사망하고 다시 열됩니다 귀하의 경우를 들어
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.rate_fragment, container,false); 

    setRetainInstance(true);//Added not to lose the fragment instance during screen rotations 

(...) 

, 내가 것 확실하지 않다 :

은 단순히 (안 부모 FragmentActivity 클래스)을 조각 클래스에 한 줄을 추가하여 그것을 해결 일한다.

+0

밖으로 분류 했습니까? –

+0

죄송합니다. 귀하의 답변을보고 나서 시도하는 것을 잊었습니다. 그래서, 그것이 작동하는 것, 나는 좀 더 그것을 밖으로 시도해야 할 수도 있습니다. 그러나 어쨌든, 대단히 감사합니다. – MagicMicky

관련 문제