【发布时间】:2012-03-24 15:50:35
【问题描述】:
这是正常的:
这很奇怪,当我滚动列表视图时,一些项目缩小了(但宽度和高度的值没有改变。):
在这个截图中 item[1:3] 是同一种类型,但是 item[3] 没有缩放。哪个项目缩放似乎随机化可能基于设备或内容。
ListView和Adapter的代码没什么特别的:
mListView = new ListView(mContext);
mListView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
mProviderAdapter = new ProviderAdapter();
mListView.setAdapter(mProviderAdapter);
class ProviderAdapter extends BaseAdapter {
@Override
public int getCount() {
return mCount;
}
@Override
public Object getItem(int position) {
return mProviders.get(position);
}
@Override
public long getItemId(int position) {
return mProviders.get(position).mMsgSpace;
}
@Override
public int getViewTypeCount() {
return 10000;
}
@Override
public int getItemViewType(int position) {
// TODO Auto-generated method stub
return (position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return mProviders.get(position).getUI().getView();
}
}
Hierarchy Viewer截图(右下角):Link
这是自定义视图:
<?xml version="1.0" encoding="UTF-8"?>
<ViewAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#44FFFFFF" >
<LinearLayout
android:id="@+id/word"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#EC5800"
android:textSize="24sp" />
<TextView
android:id="@+id/pron"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="bottom" />
</LinearLayout>
<TextView
android:id="@+id/definition"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="@string/add"
android:textSize="20sp" />
<Button
android:id="@+id/sound"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:contentDescription="@string/audio"
android:padding="16dp"
android:text="@string/audio"
android:textSize="20sp" />
<Button
android:id="@+id/switch_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:contentDescription="@string/audio"
android:padding="16dp"
android:text="@string/definition"
android:textSize="20sp" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/login"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<Button
android:id="@+id/login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="Login" />
</LinearLayout>
<LinearLayout
android:id="@+id/blank"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</LinearLayout>
</ViewAnimator>
另一种观点:
<?xml version="1.0" encoding="utf-8"?>
<ViewSwitcher xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ViewSwitcher1"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:id="@+id/example_panel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/example_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/example_zh_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />
<TextView
android:id="@+id/example_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/example_zh_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />
<Button
android:id="@+id/switchto_note"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
<LinearLayout
android:id="@+id/note_panel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<EditText
android:id="@+id/note_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textMultiLine" >
<requestFocus />
</EditText>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:id="@+id/comfirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<Button
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
</LinearLayout>
</ViewSwitcher>
【问题讨论】:
-
可以把ListView en custom Row的xml代码贴出来吗?
-
你真的有10000种不同的观点吗?
-
10000 可能是魔法值 :) 在 getItemViewType() 中更好地返回 IGNORE_ITEM_VIEW_TYPE。
-
getViewTypeCount 必须返回此适配器将创建的视图类型的数量。因此,如果您不需要 10000 个视图,让我们 getViewTypeCount 您需要的视图类型的确切数量
-
什么是 mProviders ?以及它是如何设置的?