mXX*_*mXX 77 android android-fragments android-activity android-fragmentactivity
我有2个片段,两个片段都有一个按钮.当我按下按钮时,我想开始一个新的活动.但我无法让它发挥作用.
我得到的错误:ERROR here:类型不匹配:无法从mFragmentFavorite转换为Fragment
我究竟做错了什么?
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;
}
}
Run Code Online (Sandbox Code Playgroud)
最喜爱的活动
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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果FavoriteActivity扩展了片段,则错误消失但后来我收到错误,findViewById(R.id.mainFavorite);
错误是
对于类型为FavoriteActivity,方法findViewById(int)未定义
编辑:
当我按下片段中的按钮开始活动然后应用程序崩溃这是我的logcat
03-18 16:01:23.985: E/AndroidRuntime(1985): FATAL EXCEPTION: main
03-18 16:01:23.985: E/AndroidRuntime(1985): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=FavoriteActivityList }
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1569)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1420)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.app.Activity.startActivityForResult(Activity.java:3446)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.app.Activity.startActivityForResult(Activity.java:3407)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:826)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.support.v4.app.Fragment.startActivity(Fragment.java:838)
03-18 16:01:23.985: E/AndroidRuntime(1985): at com.example.spui.FavoriteActivity$1.onClick(FavoriteActivity.java:24)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.view.View.performClick(View.java:4211)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.view.View$PerformClick.run(View.java:17267)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.os.Handler.handleCallback(Handler.java:615)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.os.Handler.dispatchMessage(Handler.java:92)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.os.Looper.loop(Looper.java:137)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.app.ActivityThread.main(ActivityThread.java:4898)
03-18 16:01:23.985: E/AndroidRuntime(1985): at java.lang.reflect.Method.invokeNative(Native Method)
03-18 16:01:23.985: E/AndroidRuntime(1985): at java.lang.reflect.Method.invoke(Method.java:511)
03-18 16:01:23.985: E/AndroidRuntime(1985): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
03-18 16:01:23.985: E/AndroidRuntime(1985): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
03-18 16:01:23.985: E/AndroidRuntime(1985): at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
Mic*_*ley 214
mFragmentFavorite
在你的代码中是一个FragmentActivity
与a不同的东西Fragment
.这就是你得到类型不匹配的原因.此外,你永远不应该打电话new
,Activity
因为这不是一个正确的方式来启动它.
如果你想开始一个新的实例mFragmentFavorite
,你可以通过一个Intent
.
来自Fragment
:
Intent intent = new Intent(getActivity(), mFragmentFavorite.class);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
从一个 Activity
Intent intent = new Intent(this, mFragmentFavorite.class);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
如果你想开始aFavorite
而不是mFragmentFavorite
那时你只需要在创建的名称中更改他们的名字Intent
.
另外,我建议更改您的班级名称以使其更准确.调用某些东西mFragmentFavorite
是不恰当的,因为它根本不是Fragment
.此外,Java中的类声明通常以大写字母开头.你最好把你的课命名FavoriteActivity
为更准确,更符合语言惯例.如果您选择这样做,则还需要将文件重命名为FavoriteActivity.java,因为Java要求类名与文件名匹配.
UPDATE
此外,它看起来像你实际上mFragmentFavorite
是一个Fragment
而不是FragmentActivity
基于你的使用onCreateView
.如果你想mFragmentFavorite
成为一个Fragment
然后更改以下代码行:
public class mFragmentFavorite extends FragmentActivity{
Run Code Online (Sandbox Code Playgroud)
改为:
public class mFragmentFavorite extends Fragment {
Run Code Online (Sandbox Code Playgroud)
lia*_*ker 20
您应该使用getActivity()
从片段启动活动
Intent intent = new Intent(getActivity(), mFragmentFavorite.class);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
此外,您应该使用大写来命名类:MFragmentActivity
而不是mFragmentActivity
.
如果您正在使用getActivity(),那么您必须确保已经添加了调用活动。如果在这种情况下尚未添加活动,则在调用getActivity()时可能会得到null
在这种情况下getContext()是安全的
那么启动活动的代码将略有变化,例如,
Intent intent = new Intent(getContext(), mFragmentFavorite.class);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
Activity、Service 和 Application 扩展了 ContextWrapper 类,因此您可以使用this或getContext()或getApplicationContext()代替第一个参数。
归档时间: |
|
查看次数: |
217968 次 |
最近记录: |