我正在努力解决这个错误,我相信我正在混合支持库,但是,我不确定如何调整我的代码以避免出现错误。
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
public void swapFragment(View v) {
SearchFragment searchFragment = new SearchFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.remove(getSupportFragmentManager().findFragmentById(R.id.findBox)).commit();
transaction = transaction.replace(R.id.findBox, searchFragment);
transaction.addToBackStack(null);
transaction.commit();
}
错误发生在以下行:
transaction = transaction.replace(R.id.findBox, searchFragment);
第二个参数会导致一个错误,说明它是错误的参数。
如有任何帮助或指示,我们将不胜感激。
如果不查看所有来源,很难判断您做错了什么,但您马上就有了remove
和replace
。你不需要两者都有。只需进行替换(即在幕后进行移除->添加)。
还要添加import
语句,以查看SearchFragment是什么类型(以及您正在使用的Fragment Manager/FFragment Transaction)。
如果您使用的是v4支持库,则必须确保它们都是支持版本。
更新
查看您的进口…
您有import android.support.v4.app.FragmentActivity;
,但您使用的是import android.app.FragmentManager;
。
所以你的代码应该看起来像:
final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.findbox, new SearchFragment());
ft.addToBackStack(null);
ft.commit();
你的进口应该更像:
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
假设SearchFragment extends Fragment
使用该支持库版本。
您正在删除片段,然后尝试替换已删除的片段。试试这样的东西:
FragmentManager FM = getFragmentManager();
FragmentTransaction FT = FM.beginTransaction();
SearchFragment F1 = new SearchFragment();
FT.replace(R.id.findBox, searchFragment);
FT.commit();
我也得到了同样的错误。。。。。我希望这个解决方案能帮助你解决问题。在SearchFragment.java
文件中,您已经在代码中将实例创建为SearchFragment
。转到该文件和import android.app.Fragment
并删除import androidx.fragment.app.Fragment
(如有提及)。希望你的错误能得到纠正,因为这对我来说是有效的。