如何在片段中使用多个布局文件?

时间:2017-09-25 07:58:05

标签: java android android-fragments

我需要实现一个片段,该片段执行处理不同数据集的函数,并且还需要不同的布局文件来渲染多个视图。我想为与多个布局视图关联的数据的所有后端操作实现一个公共片段。我怎么能这样做?

3 个答案:

答案 0 :(得分:0)

而不是你可以试试这个解决方案

创建一个基本片段,其中包含执行某些常见任务的所有方法,这些方法是片段所必需的,例如您在问题中提到的任务(后端操作)。

使用不同的布局创建所需的片段,并扩展基本片段。

public class BaseFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        return super.onCreateView(inflater,container,savedInstanceState);
    }
    //Add your backend operations for data and common methods
}

public class FragmentA extends BaseFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    //Add your first layout here
    }

}

public class FragmentB extends BaseFragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
     //Add your second layout here 
    }

}

答案 1 :(得分:0)

您可以根据自己的条件对不同的布局进行充气,如下所示:

View mView;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    if(condition_one())
        mView = inflater.inflate(R.layout.condition_one_layout,container,false);
    else if(condition_two())
        mView = inflater.inflate(R.layout.condition_two_layout,container,false);
.
.
.
    return mView;
}

答案 2 :(得分:0)

最好的方法是只使用一种活动,即;主要活动。在此主要活动中,您可以根据数据加载多个片段。 让我告诉你如何。

假设您的activity_main.xml为:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

    <LinearLayout
    android:id="@+id/fragment_container"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

</LinearLayout>

此活动由线性布局组成,其中包含一个片段。 现在,根据您的数据,您可以在此内部线性布局中加载多个片段。

在MainActivity.java中,您可以通过应用check:

加载多个片段
if(message.contains("first_fragment"))
{
  FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();

  final FIRST_FRAGMENT fragment_activity = new FIRST_FRAGMENT();

  fragmentTransaction.replace(R.id.fragment_container,fragment_activity,"FIRST FRAGMENT");

  fragmentTransaction.commit();
}
else if(message.contains("second_fragment"))
{
  FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();

  final SECOND_FRAGMENT fragment_activity = new SECOND_FRAGMENT();

  fragmentTransaction.replace(R.id.fragment_container,fragment_activity,"SECOND FRAGMENT");

  fragmentTransaction.commit();

}

我所做的就是,如果你的消息有一个字符串first_fragment,它必须加载FIRST_FRAGMENT。同样,如果您的消息包含字符串second_fragment,则必须加载SECOND_FRAGMENT。

现在,是时候实现FIRST_FRAGMENT.java了:

public class FIRST_FRAGMENT extends Fragment {

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    return inflater.inflate(R.layout.first_fragment, null);

}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {

 // buttons or textview of fragment must be initialised here.

}

同样,SECOND_FRAGMENT将是相同的。

现在假设您要检查当前加载的片段。 你可以这样做。:

final FIRST_FRAGMENT myFragment = (FIRST_FRAGMENT) getSupportFragmentManager().findFragmentByTag("FIRST FRAGMENT");

if (myFragment != null && myFragment.isVisible()) {

          myFragment.handleMessage(message);

          // here handleMessage is the function declared in FIRST_FRAGMENT
}