我是Android编程的新手。我想写一个包含两个片段的android程序。设计'将是相同但我不能写两次布局文件,因为它有很多小部件,所以有办法处理这个?
如果我复制xml文件小部件ID'保持不变,我无法在我的java课程中达到它们......
答案 0 :(得分:2)
让我们假设你有fragment_container.xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fraContainer"
android:layout_width="match_parent"
android:layout_height="match_parent" />
您需要做的是将此容器替换为程序中的一个片段,例如:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_container);
if (findViewById(R.id.fraContainer) != null)
{
MyFragmentA myFragment = new MyFragmentA();
getSupportFragmentManager()
.beginTransaction()
.add(R.id.fraContainer, myFragment)
.commit();
}
}
这将用你想要的片段替换片段布局(容器)。
现在让我们检查一下MyFragmentA和MyFragmentB
public class MyFragmentA extends Fragment {
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.fragment_both, container, false);
TextView x = (TextView)view.findViewById(R.id.textView);
x.setText("I am fragment A");
return view;
}
...
第二个片段
public class MyFragmentB extends Fragment {
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.fragment_both, container, false);
TextView x = (TextView)view.findViewById(R.id.textView);
x.setText("I am fragment B");
return view;
}
...
通过引用视图对象,两者都膨胀相同的fragment_both.xml,并且都使用具有相同ID的相同TextView!
我希望这有助于你理解它。
答案 1 :(得分:0)
您可以在更多片段中使用相同的xml文件,如下所示:
片段A
public class FragmentA extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.your_layout, container, false);
...
return v;
}
}
片段B
public class FragmentB extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.your_layout, container, false);
...
return v;
}
}