所以我正在实现FragmentActivity并尝试添加片段,但是我遇到了多个问题。我以前做过这个,实际上我使用的代码与上一个项目(它工作的地方)相同,但由于某些原因它在这里不起作用。这是我的代码:
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);
}
}
我在layout.setId()调用和trans.add()上遇到错误。 layout.setId()表示“类型为id的预期资源”,并且事务正在说“无法解析方法add(int,silversphere.eyeon.alarm_landing_page_fragment)”,这对我来说表明由于某种原因它没有将Alarm_LandingPage_Fragment识别为一个片段,但绝对应该。这是Alarm_Landing_Page_Fragment的声明:
public class Alarm_Landing_Page_Fragment extends Fragment {
任何建议都表示赞赏!
答案 0 :(得分:2)
您正在将支持库中的Fragment
相关类与SDK附带的类混合。使用Fragments时,只使用支持库类或仅使用SDK的内置类(我只是指与Fragment
相关的类)。
如果您的班级Alarm_Landing_Page_Fragment
从支持库扩展Fragment
,请更改:
import android.app.FragmentManager;
import android.app.FragmentTransaction;
// ...
FragmentManager man = getFragmentManager();
为:
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
// ...
FragmentManager man = getSupportFragmentManager();
否则,请不要扩展FragmentActivity
并仅使用SDK中与Fragment相关的类。
修改:
答案 1 :(得分:1)
问题与setId
有关。您必须创建<id>
资源:
<强> /res/values/ids.xml 强>
<resources>
<item type="id" name="myId" />
</resources>
然后,在你的文件上:
LinearLayout layout = new LinearLayout(this);
layout.setId(R.id.myId);
...
trans.add(R.id.myId, frag);