如何在安卓上修复replace方法错误?

5
我正在创建一个带有操作栏选项卡的Android应用程序,所有代码都完美无误,但是我在片段的替换方法中遇到了问题。如何解决这个错误?
系统显示:
“FragmentTransaction中的replace(int, Fragment)方法不适用于参数(int, Fragment)。”
StartActivity.java
package com.devlebactionbartab;

import android.net.wifi.p2p.WifiP2pManager.ActionListener;
import android.os.Bundle;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.drm.DrmStore.Action;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;

public class StartActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);


        ActionBar actionbar  = getActionBar();
        actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        actionbar.setTitle("Tabbed Layout");


        ActionBar.Tab Frag1Tab = actionbar.newTab().setText("Fragment1");
        ActionBar.Tab Frag2Tab = actionbar.newTab().setText("Fragment2");
        ActionBar.Tab Frag3Tab = actionbar.newTab().setText("Fragment3");
        ActionBar.Tab Frag4Tab = actionbar.newTab().setText("Fragment4");

        Fragment fragment1 = new Fragment_1();
        Fragment fragment2 = new Fragment_2();
        Fragment fragment3 = new Fragment_3();
        Fragment fragment4 = new Fragment_4();

        Frag1Tab.setTabListener(new MyTabsListener(fragment1));
        Frag2Tab.setTabListener(new MyTabsListener(fragment2));
        Frag3Tab.setTabListener(new MyTabsListener(fragment3));
        Frag4Tab.setTabListener(new MyTabsListener(fragment4));

        actionbar.addTab(Frag1Tab);
        actionbar.addTab(Frag2Tab);
        actionbar.addTab(Frag3Tab);
        actionbar.addTab(Frag4Tab);
    }


class MyTabsListener implements ActionBar.TabListener{

    public Fragment fragment;

    //constractor
    public MyTabsListener (Fragment fragment){

        this.fragment = fragment;
    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub
        ft.replace(R.id.fragment_container, fragment);
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }
}

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.start, menu);
        return true;
    }
}
3个回答

3

我曾经遇到同样的问题,因为我使用了getFragmentManager()。如果你使用getSupportFragmentManager(),它会解决这个问题。


3
 android.app.FragmentTransaction.replace(int id,android.app.Fragment fragment);

您的方法正在寻找来自android.app.Fragment的片段,而您已经导入了android.support.v4.app.Fragment。我的建议是您也从v4支持中导入FragmentTransaction。
步骤:
删除:import android.app.FragmentTransaction;
添加:import android.support.v4.app.FragmentTransaction;
然后转到eclipse->project->clean -> clean all。 v4支持FragmentTransaction

@wtsang02 我按照你说的做了,导入了 android.support.v4.app.FragmentTransaction 但是还是出现同样的错误。 - LebDev
删除FragmentTransaction和Fragment导入,添加v4导入,清理。 - wtsang02
你说的“添加v4导入,清理”是什么意思?我尝试只导入android.v4.app,但出现了错误。 - LebDev
在答案中添加了步骤。 - wtsang02
我会编辑我的问题并添加我尝试使用导入的内容,也许你能帮助我。 - LebDev
我按照你说的做了,删除、添加和清理了,但仍然遇到了相同的问题,没有任何改变。 - LebDev

1
你正在混合使用较新的片段支持类型和支持类。请替换这些行:
import android.app.Fragment; 

使用 import android.support.v4.app.Fragment;

import android.app.FragmentManager;
使用 import android.support.v4.app.FragmentManager;

然后继承android.support.v4.app.FragmentActivity而不是Activity,并将像getFragmentManager()替换为getSupportFragmentManager()以及您可能正在使用的其他方法。


当我尝试在片段适配器上调用getItem时,import android.support.v4.app.Fragment和其他所有修复都为我解决了问题。 - mewc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接