2013-05-13 107 views
2

加载程序在最近遇到加载程序时遇到问题。我创建了一个小项目,再现问题https://github.com/solcott/loaders-orientation-change启动新活动后,在新活动中改变方向并按下后退按钮

我有一个简单的活动,增加了一个片段

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Fragment mainFragment = getFragmentManager().findFragmentById(R.id.main_fragment); 
    if(mainFragment == null){ 
     Log.w(getClass().getSimpleName(), "creating new Fragment"); 
     mainFragment = new MainFragment(); 
     getFragmentManager().beginTransaction().add(R.id.main_fragment, mainFragment).commit(); 
    } 
    } 
} 

在我的片段,我开始一个Loader,只是返回一个在屏幕上显示一个整数。另外还有一点开始一个新的活动按钮:

public class MainFragment extends Fragment implements LoaderCallbacks<Integer> { 

private static int NEXT_VAL = 0; 

TextView text1; 

Button button1; 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    getLoaderManager().initLoader(1, null, this); 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.fragment_main, container, false); 
} 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    text1 = (TextView) view.findViewById(android.R.id.text1); 
    button1 = (Button) view.findViewById(android.R.id.button1); 
    button1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      startActivity(new Intent(getActivity(), NextActivity.class)); 
     } 
    }); 
} 

@Override 
public Loader<Integer> onCreateLoader(int id, Bundle args) { 
    AsyncTaskLoader<Integer> loader = new AsyncTaskLoader<Integer>(
      getActivity()) { 

     @Override 
     public Integer loadInBackground() { 
      return NEXT_VAL++; 
     } 
    }; 
    loader.forceLoad(); 
    return loader; 
} 

@Override 
public void onLoadFinished(Loader<Integer> loader, Integer data) { 
    text1.setText(data.toString()); 
} 

@Override 
public void onLoaderReset(Loader<Integer> loader) { 
    // TODO Auto-generated method stub 

} 

} 

到目前为止一切正常,我可以改变方向,并且显示不改变整数。我甚至可以开始新的活动,然后点击返回按钮,显示的整数不会改变。

但是,当我导航到新的活动时,更改方向并按下后退按钮时,整数会递增。我希望它的行为方式与没有方向改变的方式相同。

在Fragment.onCreate()中调用setRetainInstance(true)使其更糟糕。 onLoadComplete永远不会被调用,整数也不会显示。

有没有其他人遇到这个问题,并找到解决方法?这里问

+0

你为什么使'NEXT_VAL'静态? – Luksprog 2013-05-13 19:58:16

+0

为了进行调试,我将其设为静态。我在活动中显示的整数增加,那意味着onCreateLoader被再次调用并递增。 – solcott 2013-05-13 20:08:26

回答

相关问题