2013-04-15 47 views
0

我有显示在网格中显示的项目列表和数据来自web服务。当我点击它需要到新屏幕的项目,但是当从这个屏幕到具有网格的屏幕时,布局被重新创建,但是我想保存实例像活动,以便不再创建屏幕。我能做些什么来实现这一目标?在片段屏幕上不断加载?

public void onActivityCreated(Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState); 
      mfragmentManager = getActivity().getSupportFragmentManager(); 
       mhandler=new Handler(this); 
      mLvAllDeals = (GridView) mview.findViewById(R.id.xLvAllDeals); 
      mLvAllDeals.setCacheColorHint(0); 
      mLvAllDeals.setOnItemClickListener(this); 

        new MyDealsAsyncTask().execute(); 
    } 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
       mAlDealName = new ArrayList<AllDealsData>(); 
    } 


    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     if(arg0==mLvAllDeals) 
{ 
      position = arg2; 

         AllDealsData bean; 

          bean = mAlDealName.get(position); 

          Fragment frag = getFragmentManager().findFragmentById(R.id.inner_content2); 
          FragmentTransaction ft = getFragmentManager().beginTransaction(); 
          ft.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right); 
          if (!frag.getTag().equals("dealsinfo")) 
          { 
           Bundle args = new Bundle(); 
           args.putString("dealid", bean.getId()); 
           mdealinfo.setArguments(args); 
           ft.replace(R.id.inner_content2, mdealinfo, "dealsinfo"); 
           ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
           ft.addToBackStack(null); 
           ft.commit(); 
          } 


     } 
} 
     } 

回答

0

当片段进行交易,onCreateView()onActvityCreated()将会再次调用,但它不会被称为onCreate()方法。所以维护数据的方法是onCreate()。如果数据已经加载,直接设置到适配器以及加载webservices数据使用一些额外的标志来管理它。

有关片段生命周期的详细信息,请参阅本link

+0

这是正确的,但是当我回来这个画面可以nither保存屏幕也不是的AsyncTask(新MyDealsAsyncTask()执行();)被称为因此数据不会加载到屏幕上。你能告诉我在这种情况下该怎么做。 – user2106413

+0

在事务完成后提交注册监听器(提交完成。)。这个监听器将有助于了解当子片段与片段管理器分离时,当前片段将会出现。 getSupportFragmentManager()。addOnBackStackChangedListener(新OnBackStackChangedListener(){ \t \t \t \t \t \t @Override \t \t \t公共无效onBackStackChanged(){ \t \t \t \t // TODO自动生成方法存根 \t \t \t \t \t \t \t} \t \t}); –