我有一个列表视图,必须填充多个元素。最初,我想显示前两个元素,然后在用户开始滚动时显示其他元素。
我的代码如下:
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);
在此示例中,我希望Android
和iPhone
最初可见,然后用户应该能够滚动到其他选项。
目前所有选项都可见,我哪里错了?
答案 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;
}
}