繁体   English   中英

如何解决 Android 中的事务错误?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM