我决定从多个活动切换到一个在片段之间切换的活动,但应用程序现在崩溃了。
以下是我将片段添加到
的活动公共类MainActivity扩展了SherlockFragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyFragment fragment = new MyFragment();
fragment.setArguments(getIntent().getExtras());
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, fragment).commit();
}
这是片段,它是一个观察者并具有功能,但为了节省空间,只需显示创建
public class MyFragment extends SherlockFragment implements Observer{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.my_fragment, container, false);
}
Heres my_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent" >
... HAS SOME TEXT VIEWS HERE!
</RelativeLayout>
我得到的崩溃是
02-15 16:17:41.079: E/AndroidRuntime(18668): FATAL EXCEPTION: main
02-15 16:17:41.079: E/AndroidRuntime(18668): java.lang.RuntimeException:
Unable to start activity ComponentInfo{com.example.myapp/com.example.myapp.MainActivity}:
java.lang.IllegalArgumentException:
No view found for id 0x7f040036 for fragment MyFragmentt{41a05910 #0 id=0x7f040036}
任何人都可以帮助我吗?我无法弄清楚造成这种情况的原因。我知道如果我在主要活动(本帖中的顶部代码块)中注释掉getSupportFragmentManager(),它将在我的片段中不会绘制任何内容。
更新
我不确定在哪里放置的frame_container
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
答案 0 :(得分:0)
因此,在应用程序中使用Fragments
的方式有两个。
第一种方法是在xml文件中声明Fragment,如下所示:
<fragment android:name="com.example.news.ArticleReaderFragment"
android:id="@+id/viewer"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent" />
第二种方法是,如果您动态地将片段添加/替换到容器中,在大多数示例中FrameLayout
。以下是如何做到这一点:
在您的主FragmentActivity
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.myFragmentContainer);
}
并在您的xml myFragmentContainer.xml
中放置fragment_container
,如下所示:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
您正在添加并替换Fragments
,如下所示:
if (findViewById(R.id.fragment_container) != null) {
if (savedInstanceState != null) {
return;
}
// Create an instance of ExampleFragment
HeadlinesFragment firstFragment = new HeadlinesFragment();
// if there are any extras
firstFragment.setArguments(getIntent().getExtras());
// Add the fragment to the 'fragment_container' FrameLayout
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, firstFragment).commit();
}
以及您要显示的下一个片段:
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, secondFragment).commit();