Android SlidingUpPanelLayout仅在折叠后显示List元素

时间:2014-08-06 03:21:19

标签: android android-fragments slidingmenu

我目前正在尝试使用ListView作为主要布局并使用相对布局作为滑动布局来实现AndroidSlidingUpPanel。这是我正在使用的XML:

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

    <com.sothree.slidinguppanel.SlidingUpPanelLayout
        xmlns:sothree="http://schemas.android.com/apk/lib/com.sothree.slidinguppanel"
        android:id="@+id/bottom"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/bar_background"
        android:gravity="bottom"
        android:orientation="horizontal"
        sothree:collapsedHeight="40dp" >

        <ListView
            android:id="@+id/song_list"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="42"
            android:fastScrollEnabled="true" />

        <RelativeLayout
            android:id="@+id/bottom_bar_preview"
            android:layout_width="match_parent"
            android:layout_height="300dp"
            android:background="@color/bar_background"
            android:orientation="horizontal" >
        </RelativeLayout>
    </com.sothree.slidinguppanel.SlidingUpPanelLayout>

</LinearLayout>

我的问题是,只有在展开和折叠滑动布局一次后,列表的内容才会显示。 SlidingUpPanelLayout本身嵌入到位于FragmentPagerAdapter内的Fragment中。我还注意到,在将两个片段滑离它(然后再返回)之后,列表的内容消失了。 这是片段的代码:

public abstract class Songs extends Fragment {
    protected ArrayList<String> elements;
    protected SonglistAdapter adapter;

    public Songs(ArrayList<String> es) {
        elements = es;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        LinearLayout rootView = (LinearLayout) inflater.inflate(R.layout.list_songlist, container, false);

        ListView lview = (ListView) rootView.findViewById(R.id.song_list);
        adapter = new SonglistAdapter(inflater, elements);
        lview.setAdapter(adapter);

        return rootView;
    }
}

这里是它的适配器:

public class SonglistAdapter extends BaseAdapter {
    private ArrayList<String> elements;
    private LayoutInflater inflater;

    public SonglistAdapter(LayoutInflater infl, ArrayList<String> es) {
        elements = es;
        inflater = infl;
    }

    @Override
    public int getCount() {
        return elements.size();
    }

    @Override
    public Object getItem(int i) {
        return elements.get(i);
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        RelativeLayout layer = (RelativeLayout) inflater.inflate(R.layout.list_songlist_item, parent, false);

        // fill current item with information
        TextView view = (TextView) layer.findViewById(R.id.song_title);
        view.setText(elements.get(position));

        return layer;
    }
}

我在FragmentPagerAdapter中创建Fragment,如下所示:

    ArrayList<String> arr = new ArrayList<String>();
    arr.add("Hello");
    arr.add("Bye");

    ContentHandler.overviewFragment = new Overview(arr);

&#39; ContentHandler.overviewFragment&#39;然后返回&#39; public Fragment getItem(int index)&#39; (以通常的方式)。

我尝试查看AndroidSlidingUpPanel的来源,并认为该错误可能位于&{39; protected void onLayout中的this文件中(boolean changed,int l,int t,int r,int b) &#39;功能,但我发现启动调用和滑动面板重新折叠调用之间没有任何区别。 所以我的问题是,如果你们中的任何人知道我的实施有什么问题。

PS:由于这是我的第一次提交,我很乐意以任何可能的方式改进我的帖子!

1 个答案:

答案 0 :(得分:0)

通过将ListView的layout_height设置为match_parent

,可以解决此问题