添加片段作为ListView标头

ono*_*nof 5 android android-listview android-fragments android-support-library

我将Android应用程序定位到API 15,最小8个.所以我使用支持库来管理片段.我有一组片段,我在应用程序的几个部分使用.

现在,在一个活动中,我在布局中有一个ListView:

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/listOfEvents"
    android:layout_width="match_parent" android:layout_height="match_parent">
</ListView>
Run Code Online (Sandbox Code Playgroud)

我想在ListView标题中添加我的一个片段.我试过这个:

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.event_open);

    listOfEvents = (ListView) findViewById(R.id.listOfEvents);

            Fragment fragment = new SortingStandardFragment();
            getSupportFragmentManager()
              .beginTransaction()
                  .add(fragment, null)
              .commit();

            View fragmentView = fragment.getView(); // problem: fragment is null!
            listOfEvents.addHeaderView(fragmentView);
    }
Run Code Online (Sandbox Code Playgroud)

但是我得到一个错误,因为fragment.getView()返回null(api引用文档说我必须在添加调用中放置一个GroupView Id,但是我应该在哪里放置GroupView?是否有另一种方法可以达到标记?

ono*_*nof 14

我通过创建一个新的布局解决了这个问题,该布局只包含列表标题中我需要的片段:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment
        android:id="@+id/myFragmentEmbedded"
        android:name=".SortingStandardFragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

并在活动代码中:

LayoutInflater inflater = getLayoutInflater();
header = inflater.inflate(R.layout.myLayout, null);
listOfEvents.addHeaderView(header);

SortingStandardFragmenttitleFragment = (SortingStandardFragment) 
     getSupportFragmentManager()
          .findFragmentById(R.id.myFragmentEmbedded);
Run Code Online (Sandbox Code Playgroud)