我有可滚动的Listview项目。每个项目都有以下布局。
我根据需要显示或隐藏ID为customer_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>
我在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;
}
加载后工作正常。但是当我滚动列表视图时,项目的顺序会发生变化。
答案 0 :(得分: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))
相同。这只是一个快捷方式,您不必使用它。