![](/img/trans.png)
[英]How to resolve Snapshot isolation transaction aborted error in Hibernate
[英]How to resolve a transaction error in Android?
我认为我的问题与我用于 FragmentTransaction 的版本有关,但我无法理解。 这是我在构建应用程序失败时收到的消息:
错误:(21, 20) 错误:没有找到合适的方法 add(int,BlankFragment) 方法 FragmentTransaction.add(Fragment,String) 不适用(参数不匹配;int 无法转换为 Fragment)方法 FragmentTransaction.add(int, Fragment) 不适用(参数不匹配;BlankFragment 无法转换为 Fragment)错误:(22, 20) 错误:没有找到适合 add(int,Fragment2) 方法的方法 FragmentTransaction.add(Fragment,String) 不适用(参数)不匹配;int 无法转换为 Fragment) 方法 FragmentTransaction.add(int,Fragment) 不适用(参数不匹配;Fragment2 无法转换为 Fragment)错误:任务 ':app:compileDebugJavaWithJavac' 的执行失败。 编译失败; 有关详细信息,请参阅编译器错误输出。
代码:
package com.example.mohamedremih.fragments;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Handler;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity implements BlankFragment.OnFragmentInteractionListener{
Fragment2 fragment2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragment2=new Fragment2();
BlankFragment blankFragment=new BlankFragment();
FragmentManager manager=getFragmentManager();
FragmentTransaction transaction=manager.beginTransaction();
transaction.add(R.id.lay1,blankFragment);
transaction.add(R.id.lay2,fragment2);
transaction.commit();
}
}
这是我用于将片段更新为新片段的方法。 假设您已经有一个占位符片段作为 FrameLayout。
protected void swapFragment(BaseFragment fragment, @Nullable Bundle bundle) {
if (fragment.isVisible()) {
return;
}
A35Log.v(TAG, "swapFragment( " + fragment.getClass().getSimpleName() + " )");
Bundle currentFragBundle = fragment.getArguments();
if (currentFragBundle == null && bundle != null) {
fragment.setArguments(bundle);
} else if (bundle != null) {
fragment.getArguments().putAll(bundle);
}
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.executePendingTransactions();
//Make sure the requested fragment isn't already on the screen before adding it
if (fragment.isAdded()) {
if (fragment.isHidden()) {
fragmentManager.beginTransaction().show(fragment).commit();
}
A35Log.v(TAG, "Fragment was hidden, so removeFullScreen instead of replace");
return;
}
mSelectedFragment = fragment;
A35Log.v(TAG, "Replacing Active Fragment with " + fragment.getClass().getSimpleName());
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = manager.beginTransaction();
fragmentTransaction.replace(R.id.fragPlaceholder, fragment);
fragmentTransaction.commit();
}
试一试,并确保您有一个名为 fragPlaceHolder 的布局,否则更新此方法以从您的 XML 指向您的 FrameLayout。 我通常在 BaseActivity 或类似的地方使用它来交换片段,例如抽屉导航。
这可能是因为您试图从支持库中添加一个Fragment
,该支持库是从android.support.v4.app.Fragment
扩展而来的,带有android.app.FragmentTransaction
。 因此,您需要使用支持库中的 FragmentTransaction 与:
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.