在列表视图中显示2个初始项目,然后显示所有项目

时间:2016-04-01 06:53:59

标签: android listview

我有一个列表视图,必须填充多个元素。最初,我想显示前两个元素,然后在用户开始滚动时显示其他元素。

我的代码如下:

ListView in XML

<LinearLayout
        android:id="@+id/layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="vertical">

        <ListView
            android:id="@+id/options"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </LinearLayout>

ListView Item Definition

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="52dp"
    android:gravity="center_vertical"
    android:background="@color/white">

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="16dp"
        android:inputType="textMultiLine"
        android:lines="2" />

</RelativeLayout>

适配器:

String[] mobileArray = {"Android", "iPhone","Windows", "Mac", "Moto", "Oneplus", "Random A", "Random B", "Random C", "Random D"};

ListView listView = (ListView) getActivity().findViewById(R.id.options);

LinearLayout responseLayout = (LinearLayout) getActivity().findViewById(R.id.layout);

ArrayAdapter adapter = new ArrayAdapter<String>(getActivity(), R.layout.item, R.id.text,mobileArray);

listView.setAdapter(adapter);

listView.setVisibility(View.VISIBLE);

responseLayout.setVisibility(View.VISIBLE);

在此示例中,我希望AndroidiPhone最初可见,然后用户应该能够滚动到其他选项。

目前所有选项都可见,我哪里错了?

3 个答案:

答案 0 :(得分:0)

我没有尝试过,但如果你制作自定义适配器并且在getView()中,当你不希望项目可见时会返回null?

答案 1 :(得分:0)

可能需要动态分配列表单元格高度。为了只显示前两个项目,每个单元格高度应为屏幕尺寸的一半。

Point size = new Point();
    Display display=getWindowManager().getDefaultDisplay();
    int screenWidth;
    int screenHeight;
    if(Build.VERSION.SDK_INT<Build.VERSION_CODES.HONEYCOMB_MR2)
    {
        screenWidth=display.getWidth();
        screenHeight=display.getHeight();
    }
    else
    {
        display.getSize(size);
        screenWidth = size.x;
        screenHeight=size.y;
    }
int halfScreenHeight = (int)(screenHeight*0.5);

您需要为列表项relativelayout设置halfscreenHeight。

答案 2 :(得分:0)

只需创建自己的自定义适配器并覆盖getCount方法,以便在必要时返回2。然后,当您需要显示所有项目时,您应该设置标记,通知您有更多项目,并在此之后调用adapter.notifydatasetchanged

这样的事情:

    class CustomAdapter extends BaseAdapter {
    private List elements;
    private boolean showAll;
    private int resId;

    public CustomAdapter(List elements, boolean showAll, int resId) {
        this.elements = elements;
        this.showAll = showAll;
        this.resId = resId;
    }

    @Override
    public int getCount() {
        if (elements == null) {
            return 0;
        } else if (elements.size() < 2 || showAll) {
            return elements.size();
        } else {
            return 2;
        }
    }

    public void setShowAll(boolean showAll) {
        this.showAll = showAll;
        notifyDataSetChanged();
    }

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //Todo inflate your element
        return null;
    }
}