简介 我希望根据用户从导航抽屉中的选择来获得不同的片段。对于导航抽屉中的每个项目,都应该调用另一个站点。我希望通过片段实现这一目标。 首先通过在onCreate-method
中执行以下操作来显示主片段if ( savedInstanceState == null ) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment fragment = MainFragment.passList(hashMap);
ft.replace(R.id.content_frame, new MainFragment());
ft.commit();
}
正如您所看到的,我正在将数据(散列映射)传递给完美运行的片段方法。然后将数据放入字符串数组中。这可以工作,数据也可以在片段的onCreate方法中使用。
这是主要活动的xml
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ListView
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/darker_gray"
android:dividerHeight="0.1dp" />
</android.support.v4.widget.DrawerLayout>
这是主片段的XML
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainRelativeLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/activatedBackgroundIndicator"
android:gravity="center_vertical"
android:paddingRight="10dp"
>
<ScrollView
android:id="@+id/mainScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1.03" >
<LinearLayout
android:id="@+id/mainListView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
</ScrollView>
</RelativeLayout>
我现在想要实现的是在滚动视图中显示数据。但我的问题是,我如何填充它以及如何初始化它?
通常情况下我会去创建它们 - 因为findViewById在片段中不起作用(必须自己编写方法)
ScrollView sv = new ScrollView(getActivity());
LinearLayout ll = new LinearLayout ( getActivity() );
sv.addView(ll);
ll.addView(SAMPLETEXTVIEW);
View mainView = inflater
.inflate(R.layout.main_fragment, container, false);
return mainView;
但是这只留下了一个空白屏幕并没有添加实际文字。我怎样才能做到这一点?数据就在那里 - 我知道,因为它是用System.out.println打印出来的 - 我只需要一种方法来显示它。 Thx提前!
修改
当我这样做时
View rootView = inflater.inflate(R.layout.main_fragment, container, false);
ScrollView sv = (ScrollView) rootView.findViewById(R.id.mainScrollView);
LinearLayout ll = (LinearLayout) rootView.findViewById(R.id.mainListView);
sv.addView(ll);
我只得到一个IllegalStateException,ScrollView只能托管一个直接的孩子...但我不明白。 linearlayout是唯一直接的孩子。为什么会有问题?
以下是完整的onCreateView
- 方法
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.main_fragment, container, false);
ScrollView sv = (ScrollView) rootView.findViewById(R.id.mainScrollView);
LinearLayout ll = (LinearLayout) rootView.findViewById(R.id.mainListView);
sv.addView(ll);
source = new TextView[hashMapSize];
for (int i = 0; i < hashMapSize; i++) {
source[i] = new TextView(getActivity());
source [i].setText( "Source: " + sourceArr [i] );
ll.addView(source[i]
}
return rootView;
}
答案 0 :(得分:1)
您获得IllegalStateException
的原因是因为您对已经包含一个直接子项(在布局xml中声明)的ScrollView的R.layout.main_fragment进行了充气。
您不应该添加sv.addView(ll)
已存在的代码。您需要做的就是像findViewById
一样获取参考文献。
删除sv.addView(ll);
,你应该没问题。