简体   繁体   English

片段交易未将我的片段识别为片段

[英]Fragment Transaction not recognizing my fragment as a fragment

So i'm implementing a FragmentActivity and am trying to add a fragment, however I'm running into multiple problems. 所以我正在实现FragmentActivity并试图添加一个片段,但是我遇到了多个问题。 I've done this before, and am actually using the same code as the last project (where it worked), but for some reason it's not working here. 我之前已经做过,实际上正在使用与上一个项目相同的代码(它在其中工作),但是由于某种原因,它在这里不起作用。 Here's my code: 这是我的代码:

package silversphere.eyeon;

import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.widget.LinearLayout;

public class AlarmsActivity extends FragmentActivity {



    @Override
    public void onCreate(Bundle savedInstanceState)
    {
         super.onCreate(savedInstanceState);

         LinearLayout layout = new LinearLayout(this);
         layout.setId(40000);

         FragmentManager man = getFragmentManager();
         FragmentTransaction trans = man.beginTransaction();

         Alarm_Landing_Page_Fragment frag = new Alarm_Landing_Page_Fragment();

         trans.add(40000, frag);

    }

}

I'm getting an error on the layout.setId() call and also the trans.add(). 我在layout.setId()调用以及trans.add()上遇到错误。 The layout.setId() is saying "expected resource of type id" and the transaction is saying "cannot resolve method add(int, silversphere.eyeon.alarm_landing_page_fragment)", which to me suggests that for some reason it's not recognizing the Alarm_LandingPage_Fragment as a fragment, but it definitely should be. layout.setId()表示“类型为ID的预期资源”,而事务处理则表示“无法解析方法add(int,silversphere.eyeon.alarm_landing_page_fragment)”,这对我来说表明由于某种原因它无法将Alarm_LandingPage_Fragment识别为片段,但绝对应该。 Here's the declaration for Alarm_Landing_Page_Fragment: 这是Alarm_Landing_Page_Fragment的声明:

public class Alarm_Landing_Page_Fragment extends Fragment {

Any suggestions are appreciated! 任何建议表示赞赏!

You are mixing Fragment related classes from the support library with the ones shipped with SDK. 您正在将支持库中与Fragment相关的类与SDK附带的类混合在一起。 Use either only support library classes or only SDK's built-in classes when working with Fragments (I mean only classes related to Fragment s). 使用Fragments时,请仅使用支持库类或SDK的内置类(我的意思是仅与Fragment相关的类)。

If your class Alarm_Landing_Page_Fragment extends Fragment from the support library then change: 如果您的类Alarm_Landing_Page_Fragment从支持库扩展了Fragment ,则更改:

import android.app.FragmentManager;
import android.app.FragmentTransaction;

// ...

FragmentManager man = getFragmentManager();

to: 至:

import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;

// ...

FragmentManager man = getSupportFragmentManager();

Otherwise, do not extend FragmentActivity and use only Fragment related classes from SDK. 否则,请勿扩展FragmentActivity并仅使用SDK中与Fragment相关的类。

Edit: 编辑:

See also this answer: Error inflating class fragment (As ListFragment) 另请参见以下答案: 错误夸大类片段(作为ListFragment)

The problem is related to the setId . 问题与setId You have to create an <id> resource: 您必须创建一个<id>资源:

/res/values/ids.xml /res/values/ids.xml

<resources>
    <item type="id" name="myId" />
</resources>

An then, on your file: 然后,在您的文件上:

LinearLayout layout = new LinearLayout(this);
layout.setId(R.id.myId);

...

trans.add(R.id.myId, frag);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM