android错误:“;提交已被称为“提交”;当移除碎片时
我想实现一个有片段的活动!当我点击Fragment1时,Fragment2被调用,当我点击Fragment2时,Fragment2应该从屏幕上删除! 我通过在其onCreateView中调用LinearLayout of Fragment2的setOnclickListener来实现它,并在我的onclicklistener上调用android错误:“;提交已被称为“提交”;当移除碎片时,android,android-fragments,android-activity,Android,Android Fragments,Android Activity,我想实现一个有片段的活动!当我点击Fragment1时,Fragment2被调用,当我点击Fragment2时,Fragment2应该从屏幕上删除! 我通过在其onCreateView中调用LinearLayout of Fragment2的setOnclickListener来实现它,并在我的onclicklistener上调用 transaction.remove(myFragment) transaction.commit() 但在那之后,我遇到了这个错误:commit已经被调用了 如何修
transaction.remove(myFragment)代码>
transaction.commit()代码>
但在那之后,我遇到了这个错误:commit已经被调用了
如何修复此错误,以下是我的代码:
这是我的片段类
public class ArticleFragment extends Fragment {
final static String ARG_POSITION = "position";
int mCurrentPosition = -1;
private static LinearLayout l;
private android.support.v4.app.FragmentTransaction transaction;
private Fragment newFragment;
public void setArticleFragment(android.support.v4.app.FragmentTransaction transaction , Fragment newFragment) {
this.transaction = transaction;
this.newFragment = newFragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (savedInstanceState != null) {
mCurrentPosition = savedInstanceState.getInt(ARG_POSITION);
}
View v = inflater.inflate(R.layout.article_view, container , false);
l = (LinearLayout) v.findViewById(R.id.transparentArea);
if(l == null)
l.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
transaction.remove(newFragment);
transaction.commit();
}
});
return v;
}
}
还有我的维护课
public class MainActivity extends FragmentActivity implements
HeadlinesFragment.OnHeadlineSelectedListener{
HeadlinesFragment firstFragment;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.news_articles);
if (findViewById(R.id.fragment_container) != null) {
if (savedInstanceState != null) {
return;
}
firstFragment = new HeadlinesFragment();
firstFragment.setArguments(getIntent().getExtras());
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, firstFragment).commit();
}
}
public void onArticleSelected(int position) {
ArticleFragment articleFrag = (ArticleFragment) getSupportFragmentManager()
.findFragmentById(R.id.article_fragment);
if (articleFrag != null) {
articleFrag.updateArticleView(position);
} else {
final ArticleFragment newFragment = new ArticleFragment();
Bundle args = new Bundle();
args.putInt(ArticleFragment.ARG_POSITION, position);
newFragment.setArguments(args);
final FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
newFragment.setArticleFragment(transaction, newFragment);
transaction.setCustomAnimations(R.anim.slidein, R.anim.slideout);
transaction.add(R.id.fragment_container, newFragment);
transaction.commit();
}
}
不要重用传入的事务,而是创建一个新的FragmentTransaction
实例来删除Fragment2
更简单的方法是将第一个片段事务添加到片段后台堆栈(例如,addToBackStack(null)
),然后在Fragment2中,只需使用FragmentManager
popBackStack()
弹出后台堆栈即可开始新事务
fragTran = fragMan.beginTransaction();
fragTran.replace(R.id.frag_cont_two, fThree);
fragTran.addToBackStack(null);
fragTran.commit();
我解决了这个问题
调用commit()
并再次替换应该从中开始的片段后
fragmentTransaction = fragmentManager.beginTransaction();
以及如何添加动画来删除此方法中的片段2??当我有许多按钮打开不同的片段时,您的代码不起作用。您必须用不同的条件替换不同的片段。请阅读fragmentI的概念我还有一个问题@AnandSavjani当我点击其他按钮时,它总是crshed应用程序并在commit中生成异常已被调用并且您的fragTran=fragMan.beginTransaction()每次单击按钮时,代码>行这不起作用,当我单击另一个按钮时,以前的数据不干净,新数据出现在以前的数据中添加fragmentTransaction.addToBackStack(null);