2017-10-05 64 views
-1

我认为我的问题是关于我用于FragmentTransaction的版本,但我无法得到它。下面是我得到的时候建立的应用程序失败的消息:如何解决Android中的交易错误?

Error:(21, 20) error: no suitable method found for add(int,BlankFragment) method FragmentTransaction.add(Fragment,String) is not applicable (argument mismatch; int cannot be converted to Fragment) method FragmentTransaction.add(int,Fragment) is not applicable (argument mismatch; BlankFragment cannot be converted to Fragment) Error:(22, 20) error: no suitable method found for add(int,Fragment2) method FragmentTransaction.add(Fragment,String) is not applicable (argument mismatch; int cannot be converted to Fragment) method FragmentTransaction.add(int,Fragment) is not applicable (argument mismatch; Fragment2 cannot be converted to Fragment) Error:Execution failed for task ':app:compileDebugJavaWithJavac'. Compilation failed; see the compiler error output for details.

代码:

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(); 
    } 
} 
+3

欢迎使用Stack Overflow。你没有解释任何问题。如果你不首先告诉我们有什么问题,我们应该如何帮助你?清楚地解释你所遇到的问题是你的工作;这是**问题和答案**的前半部分。如果你没有正确写出问题,我们不能提供答案。请花点时间参加[参观]并阅读[帮助]页面,尤其是[问]。当你说**错误**时,你需要告诉我们**你得到了什么错误,包括确切的错误信息。 –

+0

如果您遇到错误,请发布您的logcat。打开旧的调试器,让我们知道你的程序在哪一行失败。 – Barns

+0

错误:(21,20)错误:未找到适用于add(int,BlankFragment)的方法 方法FragmentTransaction.add(Fragment,String)不适用 (参数不匹配; int不能转换为片段) 方法FragmentTransaction。 add(int,Fragment)不适用 (参数不匹配; BlankFragment不能转换为片段) >编译失败;详细信息请参阅编译器错误输出。 – Beginner

回答

0

这里是我使用的片段更新到新片段的方法。假设你已经有一个占位符片段作为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或类似的交换片段,如抽屉导航。

0

这可能是因为你试图从自android.support.v4.app.Fragment扩展了android.app.FragmentTransaction支持库添加Fragment。因此,您需要使用支持库中的FragmentTransaction:

import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 
相关问题