我试着加载一个新的片段,当方法被调用。此方法创建一个新的片断和替代另一个片段:
Im trying to load an new fragment when a method is called. This method creates a new fragment and "replaces" the other fragment:
private void showTestFragment(Fragment oldFragment, boolean addBackStack, BaseAdapter adapter, int position) {
Cursor cursor = (Cursor)adapter.getItem(position);
if(cursor != null){
int idx = cursor.getColumnIndexOrThrow(Episode._ID);
long rowId = cursor.getLong(idx);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
if(oldFragment != null){
Log.i(TAG, "Removing the old fragment");
fragmentTransaction.remove(oldFragment);
}
TestFragment testFragment = new TestFragment();
testFragment.setId(rowId);
fragmentTransaction.add(android.R.id.content, testFragment);
if(addBackStack){
Log.i(TAG, "Added to the backstack");
fragmentTransaction.addToBackStack(TAG);
}
fragmentTransaction.commit();
Fragment f = getFragmentManager()
.findFragmentById(R.id.index);
Log.i(TAG, "after commit, frag is "+ f);
}
}
这工作得很好,直到我回去。最后一个片段,当我回去应该被删除。我要去实现的活动方法之前,
This works fine, until i go back. The last fragment, should be removed when i go back. Before i'm going to implement methods on the activities
public void onBackPressed(){}
要删除最后一个片段,我想知道如果我正确处理片段的变化。它看起来像我想的东西在这里..
to remove the last fragment, i want to know if i handle the fragment change correctly. It looks like i'm missing something here..
如果你真的想取代而不是做一个删除()和一个附加()。
If you really want to replace the fragment then use replace() methode instead of doing a remove() and an add().
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(..............);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
不要忘记做addToBackStack(空),这样您previous状态将被添加到backstack让你的后退按钮返回。
Don't forget to do the addToBackStack(null) so your previous state will be added to the backstack allowing you to go back with the back button.
另请参见http://developer.android.com/reference/android/app/FragmentTransaction.html#replace(int, android.app.Fragment,java.lang.String中)。
See also http://developer.android.com/reference/android/app/FragmentTransaction.html#replace(int, android.app.Fragment, java.lang.String) .
另外一个很好的来源是http://developer.android.com/guide/components/fragments.html (搜索替换()函数)。
Another good source is http://developer.android.com/guide/components/fragments.html (search for replace() function).