当前位置: 首页 > 知识库问答 >
问题:

从片段开始一项活动

薛钧
2023-03-14

我有两个碎片,两个碎片上都有一个按钮。当我按下按钮时,我想开始一项新的活动。但我不能让它工作。

我得到的错误:这里的错误:类型不匹配:无法从mFragmentFavorite转换为片段

我做错了什么?

我的碎片寻呼机适配器

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(int)方法未定义为FavoriteActive类型

编辑:

当我按下片段中的按钮开始活动时,应用程序崩溃了,这是我的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)

共有3个答案

高胜
2023-03-14

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

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

然后开始活动的代码会稍微改变一下,

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

活动、服务和应用程序扩展了ContextWrapper类,因此您可以在第一个参数中使用this或getContext()或getApplication ationContext()。

萧鸿轩
2023-03-14

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

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

此外,您应该使用大写字母命名类:mffragmentactivity,而不是mffragmentactivity

乐正意智
2023-03-14

在您的代码中,mFragmentFavorite是一个片段活动,它与片段不同。这就是为什么类型不匹配。此外,您不应该在活动中调用新的,因为这不是启动活动的正确方式。

如果要启动mFragmentFavorite的新实例,可以通过意图启动。

片段

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

从活动

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

如果要启动aforavorite而不是mFragmentFavorite,则只需在创建的意图中更改其名称。

此外,我建议更改类名以使其更准确。调用mFragmentFavorite是不合适的,因为它根本不是一个片段。此外,Java中的类声明通常以大写字母开头。您最好将类命名为类似“FavoriteActivity”的名称,以便更准确并符合语言惯例。您还需要将文件重命名为FavoriteActivity。java,因为java要求类名与文件名匹配。

更新

此外,根据您对onCreateView的使用情况,它看起来实际上意味着mFragmentFavorite是一个片段,而不是一个片段活动。如果希望mFragmentFavorite成为片段,请更改以下代码行:

public class mFragmentFavorite extends FragmentActivity{

将此改为:

public class mFragmentFavorite extends Fragment {
 类似资料:
  • 我已经想从我的Main活动启动我的RecipientFra法规,并从我的Main活动将数据传递到Fra法规。这是我实现的代码。但是碎片没有开始。 我还想知道如何传递intent.set数据,并在碎片中获取数据。目前我有以下代码: 受体片段 主要活动

  • 问题内容: 我有一堂课,称为extends 。 现在,在我的父级活动中,我想“运行”此片段。 这是我的: 如何运行/启动片段?我希望我的方法可以触发。 问题答案: 有很多文档!您需要的一切已经在这里。 当然,您需要在活动布局中使用该容器。

  • 我有两个活动,分别是家庭活动和沙拉菜单活动。主页活动包含七个片段,其中一个名为菜单类别的片段有四个图像,第一个图像下面的文本是沙拉菜单,当用户单击沙拉菜单时,将启动名为沙拉菜单活动的新活动。 我想,当用户点击后退按钮时,home活动必须开始,并且应该从启动salad菜单活动的相同片段开始,即home活动中的菜单类别片段。我希望每个活动都会发生这种情况,例如,如果用户从您的订单片段开始一个新的活动,

  • 我有一个由一个活动和几个片段组成的应用程序,由谷歌重新指挥。其他细节在这里。我想保持一个菜单静止和切换我的碎片在容器在中心。 当我启动该活动时,它会初始化一个变量,如代码所示。 但是,当我在fragment onCreate中使用这个变量()时,活动中的绑定行会因,如下面的logcat所示 下面是完整的logcat,我们可以看到第二个sout丢失了,但在这一点上没有抛出错误。

  • Oke所以我对android studio和android应用程序开发基本上是新手,但我想做一个应用程序,让我的青年运动可以用它作为一种数据库,但我遇到了一个问题。 我有一个包含所有组的抽屉,如果你按下抽屉按钮,它会打开一个包含名称的列表片段,我想做的是,当我按下名称时,会出现一个带有名称、照片和电话号码的活动。但我似乎不知道如何从列表片段中打开活动。 这里是ListFragment.java 这

  • 在我的中有5个片段(home、settings、newPost、notifications和profile)。 在中,我有一个,其中包含许多post视图,每个post都包含一个“open”按钮,该按钮应该打开一个。问题是,我只能在类和populateItemRows()方法中使用,所以当我不能使用... RecycerViewAdapter: