我想使用带有两个不同片段

时间:2016-02-22 23:15:43

标签: java android xml android-fragments android-studio

我是Android编程的新手。我想写一个包含两个片段的android程序。设计'将是相同但我不能写两次布局文件,因为它有很多小部件,所以有办法处理这个?

如果我复制xml文件小部件ID'保持不变,我无法在我的java课程中达到它们......

2 个答案:

答案 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;
        }
    }