1

我有带有项目的可滚动列表视图。每个项目都有以下布局。

我根据需要显示或隐藏带有 idcustomer_menu_index的 LinearLayout。Ramaining 元素显示在每个方法调用中。

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

<LinearLayout
    android:id="@+id/customer_menu_index"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@color/menu_listview_item_alphabet_bg"
    android:orientation="horizontal" 
    android:visibility="gone">

    <TextView
        android:id="@+id/customer_menu_index_letter"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:paddingBottom="5dp"
        android:paddingTop="5dp"
        android:text="bla"
        android:textColor="@color/menu_listview_item_title"
        android:textSize="10sp"
        android:textStyle="bold"
        android:typeface="sans" />
</LinearLayout>

<RelativeLayout
    android:id="@+id/customer_menu_item"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/menu_listview_item_selector"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/customer_menu_item_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="0dp"
        android:paddingBottom="0dp"
        android:paddingTop="5dp"
        android:textColor="@color/menu_listview_item_title"
        android:textSize="10sp"
        android:textStyle="bold"
        android:typeface="sans" />

    <TextView
        android:id="@+id/customer_menu_item_subtitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/customer_menu_item_title"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="0dp"
        android:paddingBottom="5dp"
        android:paddingTop="1dp"
        android:textColor="@color/menu_listview_item_subtitle"
        android:textSize="8sp"
        android:textStyle="normal"
        android:typeface="sans" />
</RelativeLayout>

</LinearLayout>

getViewBaseAdapter. getView 方法的实现。

    public View getView(int position, View convertView, ViewGroup parentView) {

    View vi = convertView;

    if (convertView == null)
    {
        vi = inflater.inflate(R.layout.customer_menu_index_item, null);
    }

    LinearLayout indexLayout = (LinearLayout) vi.findViewById(R.id.customer_menu_index);

    HashMap<String, String> category = new HashMap<String, String>();
    category = mData.get(position);

    String currentIndexLetter = category.get(CustomerMenu.KEY_COMPANY).substring(0, 1);
    if (currentIndexLetter.equals(mLastIndexLetter) == false)
    {
        TextView letter = (TextView) vi.findViewById(R.id.customer_menu_index_letter);
        letter.setText(currentIndexLetter);
        mLastIndexLetter = currentIndexLetter;
        indexLayout.setVisibility(LinearLayout.VISIBLE);
    }

    TextView title = (TextView) vi.findViewById(R.id.customer_menu_item_title);
    TextView subtitle = (TextView) vi.findViewById(R.id.customer_menu_item_subtitle);
    title.setText(category.get(CustomerMenu.KEY_COMPANY));
    subtitle.setText(category.get(CustomerMenu.KEY_CONTACT_PERSON));

    return vi;
}

加载后工作正常。但是当我滚动列表视图时,项目的顺序发生了变化。

4

1 回答 1

0

您必须有一个匹配的 else 语句来显示或隐藏LinearLayout:

if (currentIndexLetter.equals(mLastIndexLetter) == false)
{
    TextView letter = (TextView) vi.findViewById(R.id.customer_menu_index_letter);
    letter.setText(currentIndexLetter);
    mLastIndexLetter = currentIndexLetter;
    indexLayout.setVisibility(LinearLayout.VISIBLE);
}
else {
    indexLayout.setVisibility(LinearLayout.GONE);
}

另外两点:

  • if(a.equals(b) == false)是一样的if(!a.equals(b))。这只是一个快捷方式,您不必使用它。
  • 您还应该考虑使用 ViewHolder 来加速您的代码。
于 2013-01-11T18:57:43.087 回答