从片段开始一个活动

我有两个片段与两个片段一个button。 当我按下button,我想开始一个新的活动。 但是我无法让它工作。

我得到的错误: 错误在这里:types不匹配:不能从mFragmentFavorite转换为片段

我究竟做错了什么?

MyFragmentPagerAdapter

import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; public class MyFragmentPagerAdapter extends FragmentPagerAdapter{ final int PAGE_COUNT = 3; /** Constructor of the class */ public MyFragmentPagerAdapter(FragmentManager fm) { super(fm); } /** This method will be invoked when a page is requested to create */ @Override public Fragment getItem(int arg0) { switch(arg0){ case 0: return new FavoriteActivity(); //ERROR: Type mismatch: cannot convert from FavoriteActivity to Fragment case 1: return new SettingsActivity(); default: return null; } } /** Returns the number of pages */ @Override public int getCount() { return PAGE_COUNT; } } 

最喜欢的活动

 import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; public class FavoriteActivity extends Activity{ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.main_favorite, container, false); OnClickListener listnr=new OnClickListener() { @Override public void onClick(View v) { Intent i= new Intent("aFavorite"); startActivity(i); } }; Button btn =(Button) v.findViewById(R.id.mainFavorite); btn.setOnClickListener(listnr); return v; } } 

如果FavoriteActivity扩展了片段,错误消失了,但是在findViewById(R.id.mainFavorite);出现错误findViewById(R.id.mainFavorite); 和错误是

types为FavoriteActivity的findViewById(int)方法未定义

代码中的mFragmentFavorite是一个FragmentActivity ,与Fragment 。 这就是为什么你得到types不匹配。 另外,你不应该在Activity上调用new ,因为这不是启动它的正确方法。

如果你想开始一个新的mFragmentFavorite实例,你可以通过一个Intent

Fragment

 Intent intent = new Intent(getActivity(), mFragmentFavorite.class); startActivity(intent); 

从一个Activity

 Intent intent = new Intent(this, mFragmentFavorite.class); startActivity(intent); 

如果你想开始一个aFavorite而不是mFragmentFavorite那么你只需要在创build的Intent更改他们的名字。

另外,我build议改变你的类名更加准确。 调用mFragmentFavorite是不合适的,因为它不是Fragment 。 另外,Java中的类声明通常以大写字母开头。 你最好把你的类命名为FavoriteActivity ,以便更准确和符合语言习惯。 如果您select这样做,您还需要将文件重命名为FavoriteActivity.java,因为Java需要类名称与文件名匹配。

UPDATE

另外,它看起来像你实际上意味着mFragmentFavorite是一个Fragment而不是基于你的onCreateView的使用FragmentActivity 。 如果你想mFragmentFavorite是一个Fragment然后更改下面的代码行:

 public class mFragmentFavorite extends FragmentActivity{ 

让这个改为:

 public class mFragmentFavorite extends Fragment { 

您应该使用getActivity()从片段中启动活动

 Intent intent = new Intent(getActivity(), mFragmentFavorite.class); startActivity(intent); 

另外,你应该用caps命名类: MFragmentActivity而不是mFragmentActivity

我在我的片段中使用这个。

 Button btn1 = (Button) thisLayout .findViewById(R.id.btnDb1); btn1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(getActivity(), otherActivity.class); ((MainActivity) getActivity()).startActivity(intent); } }); return thisLayout; } 

如果您正在使用getActivity(),那么您必须确保已经添加了调用活动。 如果在这种情况下没有添加活动,那么当您调用getActivity()时,您可能会得到空值

在这种情况下getContext()是安全的

那么开始活动的代码会稍微改变一下,

 Intent intent = new Intent(getContext(), mFragmentFavorite.class); startActivity(intent); 

Activity,Service和Application扩展了ContextWrapper类,因此您可以在第一个参数的位置使用thisgetContext()getApplicationContext()