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

时间:2015-03-31 07:13:30

标签: java android eclipse android-fragments import

我在片段中有错误:

  

“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);
    }
}

3 个答案:

答案 0 :(得分:1)

应更改片段的导入。 这是错的: -

import android.support.v4.app.Fragment;

正确导入是: -

import android.app.Fragment;

答案 1 :(得分:0)

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

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

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

  1. 我将片段的超类更改为android.app.Fragment而不是android.support.v4.app.Fragment
  2. 我将FragmentManager更改为android.app.FragmentManager而非android.support.v4.app.FragmentManager
  3. 我使用getFragmentManager()代替getSupportFragmentManager
  4. 我希望这会有所帮助。

答案 2 :(得分:-1)

无论WeatherFragment是什么,它都不是Fragment类型,也不存在可以处理WeatherFragment的构造函数。 也许你可以将它投射到Fragment。不知道它是什么,不能告诉。

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