我正在尝试一些ActionBarSherlock Fragment选项卡。我目前在我的代码中遇到了一些问题。我在我的片段中使用了单独的Tablisteners。如果可能,请更正我的代码。
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.Tab;
import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.app.SherlockFragmentActivity;
public class FragmentsTab1 extends SherlockFragmentActivity implements
ActionBar.TabListener{
private Fragment mFragment;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment1);
}
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
mFragment = new FragmentsTab1(); //Type mismatch: cannot convert from FragmentsTab1 to Fragment
ft.add(android.R.id.content, mFragment);
ft.attach(mFragment);
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
ft.remove(mFragment);
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
}
错误代码:类型不匹配:无法从FragmentsTab1转换为Fragment
Dixit Patel的建议
import android.os.Bundle;
import android.app.Fragment;
import android.app.FragmentTransaction;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.Tab;
import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.app.SherlockFragmentActivity;
public class FragmentsTab1 extends SherlockFragmentActivity implements
ActionBar.TabListener{
private Fragment mFragment;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment1);
}
/**
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
mFragment = new FragmentsTab1();
ft.add(android.R.id.content, mFragment);
ft.attach(mFragment);
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
ft.remove(mFragment);
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
**/
public void onTabSelected(Tab tab,
android.support.v4.app.FragmentTransaction ft) {
// TODO Auto-generated method stub
mFragment = new FragmentsTab1(); //Type mismatch: cannot convert from FragmentsTab1 to Fragment
ft.add(android.R.id.content, mFragment); //The method add(int, Fragment) in the type FragmentTransaction is not applicable for the arguments (int, Fragment)
ft.attach(mFragment); //The method attach(Fragment) in the type FragmentTransaction is not applicable for the arguments (Fragment)
}
public void onTabUnselected(Tab tab,
android.support.v4.app.FragmentTransaction ft) {
// TODO Auto-generated method stub
ft.remove(mFragment); //The method remove(Fragment) in the type FragmentTransaction is not applicable for the arguments (Fragment)
}
public void onTabReselected(Tab tab,
android.support.v4.app.FragmentTransaction ft) {
// TODO Auto-generated method stub
}
}
答案 0 :(得分:0)
你得到的错误是为你说的:
FragmentsTab1不是Fragment
- 它是SherlockFragmentActivity
,即Activity
。
您需要重新编写代码,以便了解Fragment
和Activity
之间的区别。
进一步解释。
您的代码说:
mFragment = new FragmentsTab1();
但你已宣布:
public class FragmentsTab1 extends SherlockFragmentActivity implements
ActionBar.TabListener
和
private Fragment mFragment;
我不知道你要做什么,但我可以告诉你这是一个相对简单的java错误,这就是为什么我建议你试着理解Fragment
和{{1}之间的区别}。
我可以看到你是这门语言的新手,所以我建议你阅读一下java继承和子类是如何工作的 - 你会在网上找到大量资源来学习java。
如果他们没有相互继承,您将看到不能将一种类型“强制转换”为另一种类型。 “铸造”是错误的意思。它就像是说Activity
是与Car
相似的对象类型 - 但它们实际上并不相关。
那就是说,我确实建议您使用ActionBarSherlock sdk中的示例代码,因为它会为您提供所需的内容。您会发现将它作为自己应用的起点非常有用。
答案 1 :(得分:0)
错误“类型不匹配:无法从FragmentsTab1转换为Fragment”是因为SherlockFragmentActivity是一个Activity而不是Fragment。如果你想创建一个Fragment,你必须从SherlockFragment扩展。
另一方面,Richard Le Mesurier是对的,您必须了解Fragment和Activity之间的区别。