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】:我遇到了同样的问题,当我意识到这一点时我就解决了:
WebViewFragment
是 android.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() 上的行为方式