[英]How can i solve this errors and convert types?
我是android编程的初学者。 我想编写一个带有片段的程序,我阅读了本教程( http://www.mysamplecode.com/2012/08/android-fragment-example.html )并编写了该代码,但是当我运行该程序时,该程序具有编译器错误! 这些错误与add()和replace()函数有关。
我在下面编写AndroidFragmentActivity类,请仔细阅读并为我提供帮助。
AndoridFragmentActivity.java:
package com.appfragmentarray;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import com.appfragmentarray.ListFragment.OnURLSelectedListener;
public class AndroidFragmentActivity extends Activity implements OnURLSelectedListener{
boolean detailPage = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v("AndroidFragmentActivity", "onCreate()");
Log.v("AndroidFragmentsavedInstanceState", savedInstanceState == null ? "true" : "false");
setContentView(R.layout.activity_main);
if(savedInstanceState == null) {
android.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
ListFragment listFragment = new ListFragment();
ft.add(R.id.displayList, listFragment, "List_Fragment");
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
}
if(findViewById(R.id.displayDetail) != null){
detailPage = true;
getFragmentManager().popBackStack();
DetailFragment detailFragment = (DetailFragment) getFragmentManager().findFragmentById(R.id.displayDetail);
if(detailFragment == null){
android.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
detailFragment = new DetailFragment();
ft.replace(R.id.displayDetail, detailFragment, "Detail_Fragment1");
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
}
}
}
public void onURLSelected(String URL) {
Log.v("AndroidFragmentActivity",URL);
if(detailPage){
DetailFragment detailFragment = (DetailFragment)
getFragmentManager().findFragmentById(R.id.displayDetail);
detailFragment.updateURLContent(URL);
}
else{
DetailFragment detailFragment = new DetailFragment();
detailFragment.setURLContent(URL);
android.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.displayList, detailFragment, "Detail_Fragment2");
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
}
}
}
错误是:
无法从Fragment投射到DetailFragment
FragmentTransaction类型的方法add(int,Fragment,String)不适用于参数(int,ListFragment,String)
FragmentTransaction类型的方法replace(int,Fragment,String)不适用于参数(int,DetailFragment,String)
我该如何解决这个问题? 谢谢。
您可能会混淆兼容性Fragments和普通的3.0+ Fragment类。
如果要使用兼容性包:
使AndroidFragmentActivity
扩展FragmentActivity
更改
android.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
至
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
并确保所有对getFragmentManager()
调用都是getSupportFragmentManager()
确保您的片段从android.support.v4.app.Fragment
而不是android.app.Fragment
扩展
要么
如果要使用普通的Fragment,请摆脱所有support.v4
导入,并确保您的Fragments与android.app.Fragment
,后者是不可兼容的Fragment。
似乎您正在将支持库(v4)片段与本机片段混合在一起。 确保所有片段和相关组件都使用v4。 例如,您的活动应扩展FragmentActivity
而不是Activity
。 确保您的ListFragment
和DetailFragment
也使用v4,而不是本机Fragments。
我们应该确定我们使用的是兼容性还是常规片段,即android.support.v4.app。*或android.app。*
我正在使用android.support.v4.app.*
和
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
对我来说很好
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.