我开始使用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扩展Fragment {
@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创建每个概念...... !!
答案 0 :(得分:1)
您了解基础知识。 FrameLayout
可以移动到您想要的片段的任何位置。我已经完成了我的整个屏幕之前只有一个FrameLayout
,我交换了五个不同的片段进出。
如果您要同时显示两个片段,则可以使用两个FrameLayout
制作主要布局。但是,这意味着您将一直处于锁定状态(如果您删除了一个空位,则会被锁定。)空缺。
如果你想要两个片段不必同时出现在屏幕上,你可以使用一个FrameLayout
并编写代码来根据需要交换片段。
实例化片段的代码应该始终在控制活动中(如果它们是动态的)。
没有代码和更具体的问题,以上是我能给你的最佳答案。
修改强>
将两个片段并排放置的示例主要布局:
<?xml version="1.0" encoding="utf-8"?>
...
<LinearLayout
android:id="@+id/frames"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/hline1"
android:layout_below="@id/horizontalline"
android:orientation="horizontal" >
<FrameLayout
android:id="@+id/leftpane"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight=".4" />
<FrameLayout
android:id="@+id/rightpane"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1" >
</FrameLayout>
</LinearLayout>
...
将片段添加到其中一个framelayouts:
FragmentClass fragment = new FragmentClass();
getFragmentManager().beginTransaction().add(R.id.leftpane, fragment).commit();
如果你想在其中一个framelayouts(比如左窗格)中交换片段,你可以这样做:
FragmentClass fragment = new FragmentClass();
getFragmentManager().beginTransaction().replace(R.id.leftpane, fragment).commit();
我建议从XML实例化,因为它听起来像你将要有两个片段而不做任何更改。如果要打开和换出它们,那么为每个标签添加一个标签是合适的,这样如果你想再次显示它们就可以再找到它们。