FragmentTransaction 类型中的方法 add(int, Fragment) 不适用于参数 (int, WeatherFragment)

Posted

技术标签:

【中文标题】FragmentTransaction 类型中的方法 add(int, Fragment) 不适用于参数 (int, WeatherFragment)【英文标题】:The method add(int, Fragment) in the type FragmentTransaction is not applicable for the arguments (int, WeatherFragment) 【发布时间】:2015-06-04 10:38:51 【问题描述】:

我在片段中有错误:

"Fragment Transaction 类型中的方法replace(int, Fragment)为 不适用于参数 (int, Fragment)"

我该怎么办?我的片段没有出现。

    package com.example.weather;

    import android.support.v7.app.ActionBarActivity;

    import android.support.v4.app.Fragment;

    import android.text.InputType;
    import android.app.AlertDialog;

    import android.content.DialogInterface;

    import android.os.Bundle;

    import android.view.LayoutInflater;

    import android.view.Menu;

    import android.view.MenuItem;

    import android.view.View;

    import android.view.ViewGroup;

    import android.widget.EditText;

    import android.os.Build;

    public class WeatherActivity extends ActionBarActivity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_weather);
        if (savedInstanceState == null) 
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new WeatherFragment())
                    .commit();
        
    


    @Override
    public boolean onOptionsItemSelected(MenuItem item) 
        if(item.getItemId() == R.id.change_city)
            showInputDialog();
        
        return false;
    

    private void showInputDialog()
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Change city");
        final EditText input = new EditText(this);
        input.setInputType(InputType.TYPE_CLASS_TEXT);
        builder.setView(input);
        builder.setPositiveButton("Go", new DialogInterface.OnClickListener() 
            @Override
            public void onClick(DialogInterface dialog, int which) 
                changeCity(input.getText().toString());
            
        );
        builder.show();
    

    public void changeCity(String city)
        WeatherFragment wf = (WeatherFragment) getFragmentManager()
                .findFragmentById(R.id.container);
        wf.changeCity(city);
        new CityPreference(this).setCity(city);
    

【问题讨论】:

您是否定义了自己的名为 Fragment 的类型,它不扩展 android.app.Fragment? 标题错误与相关错误不匹配。请确定您需要帮助的错误。 不好意思,看不清楚说清楚 行有错误,我无法解决问题对不起我的英语,我有点弱类型 【参考方案1】:

片段的导入应该改变。 这是错误的:-

import android.support.v4.app.Fragment;

正确的导入是:-

import android.app.Fragment;

【讨论】:

你怎么知道他没有使用支持片段? 以前我花了两天时间解决初学者级别的相同问题。所以我只是猜测。可能会有所帮助 啊,好吧。答案只是让它看起来像是一个事实,但我无法确定你是如何知道这是问题所在:)【参考方案2】:

我遇到了同样的问题,当我意识到这一点时我就解决了:

WebViewFragmentandroid.app.Fragment 的子类,因此您不能使用 android.support.v4.app.FragmentManager 添加它。你必须使用android.app.FragmentManager

所以我执行以下步骤才能使用WebViewFragment

    我将 Fragments 的超类更改为 android.app.Fragment 而不是 android.support.v4.app.Fragment 我将FragmentManager 更改为android.app.FragmentManager 而不是android.support.v4.app.FragmentManager 我使用getFragmentManager() 而不是getSupportFragmentManager

我希望这会有所帮助。

【讨论】:

【参考方案3】:

无论 WeatherFragment 是什么,它都不是 Fragment 类型,并且不存在可以处理 WeatherFragment 的构造函数。 也许您可以将其转换为 Fragment。不知道是什么就说不出来。

清晨的错误。答案的第一部分是;)他正在使用他自己的课程WeatherFragment。看不到这一点,我认为它不是(正确的)片段。

【讨论】:

您绝对不能将不是 Fragment 子类型的东西转换为 Fragment。 所以我把它换成了一条Treeline 没有人帮帮我请

以上是关于FragmentTransaction 类型中的方法 add(int, Fragment) 不适用于参数 (int, WeatherFragment)的主要内容,如果未能解决你的问题,请参考以下文章

FragmentTransaction.replace()中错误的第二个参数类型

FragmentTransaction的commit和commitAllowingStateLoss的差别

如何实现 FragmentManager 和 FragmentTransaction 来替换单个片段?

fragmentTransaction.add 和 fragmentTransaction.replace 之间的区别

共享元素过渡适用于 FragmentTransaction.replace() 但不适用于 FragmentTransaction.add()

操作栏在 FragmentTransaction replace() 和 FragmentTransaction add() 上的行为方式