【发布时间】:2012-07-13 21:48:46
【问题描述】:
我开始使用 Fragments,我已经按照 API 指南的方式完成了,但是……当然这太容易了;) 当我启动应用程序时,它崩溃了。经过一番研究,我发现了这篇文章Android fragment is not working 斯蒂芬怀利的回应似乎纠正了阿里的问题,但是..我不明白! 我应该把 FrameLayout 放在哪里? “where_i_want_my_fragment” id...这是我想要的任何东西,对吧? 最后我应该把Java代码放在哪里?在我的活动中(顺便显示了 2 个片段)。
谢谢!
尼哥
编辑:让我们说一下我想要的设计,我认为你会更好地理解。 我想要一个在左侧显示字符串列表的列表片段,在右侧我想要一个片段显示有关列表中所选字符串的信息。而且我希望能够在我的应用程序的右侧用手指动作滑动(我不知道滑动片段或其他什么更好。它是相同的布局,但填充了不同的数据)
好的,我只是发布我的代码,因为我真的不明白为什么它没有做任何事情。 这是我的 activity_main.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:baselineAligned="false"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_frag"
android:name="main.courante.c.DateListFragment"
android:layout_width="fill_parent"
android:layout_height="match_parent" >
</FrameLayout>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fiche_frag"
android:name="main.courante.c.fiche_frag"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent" >
</FrameLayout>
</LinearLayout>
这是我的主要活动: 公共类 MainActivity 扩展 Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DateListFragment fragment = new DateListFragment();
getFragmentManager().beginTransaction().add(R.id.list_frag, fragment).commit();
fiche_freg frag2 = new fiche_frag();
getFragmentManager().beginTransaction().add(R.id.fiche_frag,frag2).commit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
这里是 DateListFragment(没有 onCreateView,因为它是自动生成的)
public class DateListFragment extends ListFragment {
private int mposition = 1;
private String[] mListItem = new String[] {
"Lundi 9 Juilllet",
"Mardi 10 Juillet",
"Mercredi maintenant"
};
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.setListAdapter(new ArrayAdapter<String>
(this.getActivity(),R.layout.frag_list_view ,mListItem));
this.getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
}
这里是 fiche_frag : 公共类 fiche_frag 扩展片段 {
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.checks_matin,container,false);
}
R.layout.checks_matin 单独工作正常。
我已经再次感谢您的帮助。我是 android 环境的初学者,我发现很难同时了解 UI 的所有概念......!
【问题讨论】:
-
如果您打算使用活动来放入片段,您应该从 xml 中删除
android:name标签。 -
我也会在片段中使用
onActivityCreated,而不是onCreate。 -
Fragment docs 的链接可能会有所帮助。
-
哇太棒了!!!它显示了一些东西! =) 我把我的运气推得更远了,我问你一些别的问题:我怎样才能改变我右边片段内的布局?因为在这里我在框架布局中使用片段,所以我的片段没有 id 或标签,因为它不在 xml 中,所以我该如何按标签或 id 检索我的片段(只有那两个)?例如,当我单击一个按钮时,我希望它改变我的右侧片段的布局。但也许我的设计不好。
-
不过还是非常感谢。在这方面花费的时间比我想象的要多得多..