Нижняя панель кнопок перекрывает последний элемент Listview! - PullRequest
2 голосов
/ 05 января 2011

У меня есть список, который является частью действия.Я хочу, чтобы у пользователя был выбор для пакетного удаления элементов в просмотре списка, поэтому, когда он выбирает соответствующую опцию в меню, каждый элемент списка получает флажок рядом с ним.Когда пользователь нажимает на любой флажок, панель кнопок должна скользить снизу вверх (как в приложении Gmail), а нажатие кнопки удаления удаляет выбранные элементы, однако нажатие кнопки отмены на панели снимает все отмеченные элементы.

Пока это моя страница layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"    
    android:background="@android:color/transparent"
    >

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
    >

    <LinearLayout
      android:id="@+id/list_area"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:layout_weight="1"  
      >
      <ListView
          android:id="@+id/mylist"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:background="@android:color/transparent" 
          android:drawSelectorOnTop="false"
          android:layout_weight="1"
      />

      <TextView
        android:id="@+id/empty_list_message"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textColor="#FFFFFF"
        android:layout_gravity="center_vertical|center_horizontal"
        android:text="@string/msg_for_emptyschd"
        android:layout_margin="14dip"
        android:layout_weight="1"
         />
  </LinearLayout>

  <RelativeLayout
    android:id="@+id/bottom_action_bar"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/schedule_bottom_actionbar_border"
    android:layout_marginBottom="2dip"
    android:layout_gravity="bottom"
    android:visibility="gone"
    >    
    <Button
        android:id="@+id/delete_selecteditems_button"
        android:text="Deleted Selected"
        android:layout_width="140dip"
        android:layout_height="40dip"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="3dip"
        android:layout_marginTop="3dip"
    />

    <Button
    android:id="@+id/cancel_button"
        android:text="Cancel"
        android:layout_width="140dip"
        android:layout_height="40dip"
        android:layout_alignParentRight="true"
        android:layout_marginRight="3dip"
        android:layout_marginTop="3dip"
    />    
     </RelativeLayout>    
   </FrameLayout>        
</LinearLayout>

, у меня все работает, за исключением того, что когда нижняя полоса становится видимой при выборе флажка, она перекрывает последний элемент списка.Все остальные элементы списка можно прокрутить вверх, но вы не можете прокрутить вверх самый последний элемент списка, поэтому пользователь не может выбрать этот элемент, если он собирается.Вот скриншот перекрытия .

. Я пытался использовать опцию нижнего колонтитула списка, но это добавляет панель в конец списка, а не фиксирует ее в нижней части окна.экран.Есть ли способ, которым я мог бы "поднять" просмотр списка достаточно, чтобы перекрытие не произошло ??Кстати, я уже пытался добавить нижнее поле к самому списку или LinearLayout, оборачивающий список прямо перед тем, как сделать панель кнопок видимой, но он вводит другие ошибки, такие как нажатие одного флажка проверяет другой флажок в просмотре списка.

Ответы [ 2 ]

0 голосов
/ 07 января 2011

Похоже, я решил проблему странного поведения флажка. Во-первых, проблема возникла потому, что, как только размер списка изменяется, он перерисовывается, поэтому getView () вызывается снова для всех видимых элементов списка. Поскольку я использую ViewHolder, и представление снова используется, создается впечатление, что оно вызывает повторное использование этого же флажка для какого-либо другого элемента списка. Поэтому, когда я нажимал один флажок, вместо этого выбирался другой флажок. Поскольку этот вызов для обновления представления списка происходил только при изменении размера списка, а размер списка изменялся только при пометке флажка в списке, когда не было помечено никаких других флажков, эта проблема больше не появляется после того, как первый флажок был отмечен ,

Я решил проблему, создав собственный класс коллекции для хранения отмеченных элементов, и перед помещением элемента в эту коллекцию я клонирую тег отмеченного флажка и clicklistener в новый флажок и сохраняю этот новый флажок в коллекции. , Это решило странное поведение флажков. Возможно, это не лучшее решение проблемы, поэтому, если вы знаете что-нибудь лучше, пожалуйста, поделитесь.

0 голосов
/ 05 января 2011

Не проверял это, но я уверен, что именно FrameLayout вызывает это :).Потому что FrameLayout не заботится о «весе», который вы ему дали.FrameLayout просто помещает представления, которые вы вставляете, друг перед другом.И второй, который вы дали, вы сказали, android: layout_gravity = "bottom", который заставляет его выравниваться в нижней части.но просто перед списком.Удалите FrameLayout, и он должен работать, я думаю.

Попробуйте это так:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:background="@android:color/transparent">

    <LinearLayout android:id="@+id/list_area"
        android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1">
        <ListView android:id="@+id/mylist" android:layout_width="fill_parent"
            android:layout_height="wrap_content" android:background="@android:color/transparent"
            android:drawSelectorOnTop="false" android:layout_weight="1" />

        <TextView android:id="@+id/empty_list_message"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:textColor="#FFFFFF" android:layout_gravity="center_vertical|center_horizontal"
            android:text="@string/msg_for_emptyschd" android:layout_margin="14dip"
            android:layout_weight="1" />
    </LinearLayout>

    <RelativeLayout android:id="@+id/bottom_action_bar"
        android:orientation="horizontal" android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:background="@drawable/schedule_bottom_actionbar_border"
        android:layout_marginBottom="2dip"
        android:visibility="gone">
        <Button android:id="@+id/delete_selecteditems_button"
            android:text="Deleted Selected" android:layout_width="140dip"
            android:layout_height="40dip" android:layout_alignParentLeft="true"
            android:layout_marginLeft="3dip" android:layout_marginTop="3dip" />
        <Button android:id="@+id/cancel_button" android:text="Cancel"
            android:layout_width="140dip" android:layout_height="40dip"
            android:layout_alignParentRight="true" android:layout_marginRight="3dip"
            android:layout_marginTop="3dip" />
    </RelativeLayout>

</LinearLayout>
...