我有一个带有标题面板和列表视图的布局。
这是布局。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/mainFragmentLayout">
<RelativeLayout
android:id="@+id/header"
android:background="@drawable/upper_panel"
android:layout_height="40dp"
android:layout_width="fill_parent">
<TextView android:id="@+id/news_label"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_centerVertical="true"
android:gravity="left"
android:text="@string/news_label"
android:textSize="15sp"
android:textStyle="bold"
android:layout_marginLeft="54dp"
android:textColor="@color/white"
/>
<Button android:id="@+id/refreshButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:background="@drawable/btm_refresh"
android:layout_centerVertical="true"
android:layout_marginRight="8dp"
/>
</RelativeLayout>
<ListView
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="120"
android:id="@+id/feedMeMore"
android:fastScrollEnabled="false"
android:layout_gravity="center"/>
在onTouchListener中,我删除并添加RelativeLayot标题。
public boolean onTouch(View view, MotionEvent motionEvent) {
int action=motionEvent.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
startY = motionEvent.getY();
break;
case MotionEvent.ACTION_MOVE:
float nowY = motionEvent.getY();
if (startY - nowY > 10)
{
if (mainLayout.indexOfChild(headerView) >= 0)
mainLayout.removeView(headerView);
}
else if (startY - nowY < - 100)
{
if (mainLayout.indexOfChild(headerView) < 0)
mainLayout.addView(headerView, 0);
}
}
break;
}
return false;
}
删除标题后,重新加载列表视图中的所有显示项目。 我有一个图像和文本,从网上加载,每次重新加载文本和图像。
如何关闭此重新加载?
答案 0 :(得分:1)
据我说,这是因为你的headerView在顶部对齐(即使在linearlayout上),列表视图在它下面。 因此,当您删除标题视图时,它会使listview更改其高度,以便重新绘制所有视图。
作为一种解决方案,您可以在headerview后面使用虚拟视图(需要将父视图更改为RelativeLayout),其高度与原始标题视图相同,现在您的列表视图将位于该虚拟标题视图下方,而不是原始标题视图。
像这样。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/mainFragmentLayout">
<RelativeLayout
android:id="@+id/header"
android:background="@drawable/upper_panel"
android:layout_height="40dp"
android:layout_alignParentTop="true"
android:layout_width="fill_parent">
<TextView android:id="@+id/news_label"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_centerVertical="true"
android:gravity="left"
android:text="@string/news_label"
android:textSize="15sp"
android:textStyle="bold"
android:layout_marginLeft="54dp"
android:textColor="@color/white"
/>
<Button android:id="@+id/refreshButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:background="@drawable/btm_refresh"
android:layout_centerVertical="true"
android:layout_marginRight="8dp"
/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/dummyHeader"
android:background="@drawable/upper_panel"
android:layout_height="40dp"
android:layout_alignParentTop="true"
android:layout_width="fill_parent"/>
<ListView
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="120"
android:id="@+id/feedMeMore"
android:fastScrollEnabled="false"
android:layout_gravity="center"/>