1

アイテムを含むスクロール可能なリストビューがあります。各項目は以下のレイアウトになっています。

必要に応じて id で LinearLayout を表示または非表示にしcustomer_menu_indexます。ラメイン要素は、すべてのメソッド呼び出しで表示されます。

<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>

getViewのメソッドでこのレイアウトを使用しますBaseAdapter。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

LinearLayoutを表示または非表示にするには、一致する else ステートメントが必要です。

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);
}

その他の 2 つのポイント:

  • if(a.equals(b) == false)と同じif(!a.equals(b))です。これは単なるショートカットです。これを使用する必要はありません。
  • また、ViewHolder を使用してコードを高速化することも検討する必要があります。
于 2013-01-11T18:57:43.087 に答える