隐藏所选行的列表分隔符 android?

Hide listdivider for selected row android?

我有一个 android 本机 listview.now 我必须隐藏仅选定行的分隔线及其相邻行,如图所示 follows.how 我可以做到吗?

Here my lisview code

 <ListView
            android:id="@+id/listView_errors"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:divider="@drawable/list_divider_complaint"
            android:dividerHeight="1sp"
            android:listSelector="@drawable/bgselected"
            android:scrollbars="none" />

And the result so far

onSelect代码你可以试试这个

yourListView.setDivider(null);

yourListView.setDivider(new ColorDrawable(android.R.color.transparent));
yourListView.setDividerHeight(0);

在自定义列表项布局中创建自定义分隔线视图。 然后,如果选择了一个项目,则隐藏此自定义分隔线视图。

风格:

<style name="HorizontalDivider">
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">1px</item>
    <item name="android:background">#444</item>
</style>

自定义列表项:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="5dp"
    android:background="@drawable/click_effect_green"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/line_a"
        android:layout_marginTop="4dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textColor="#000"
        android:textSize="16dp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/line_b"
        android:layout_marginBottom="4dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textColor="#000"
        android:textSize="14dp" />

     <View id="@+id/divider" style="@style/HorizontalDivider"/>
</LinearLayout>

您必须按照以下步骤操作:

  1. 删除列表视图分隔符

     <ListView
        android:id="@+id/listView_errors"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:divider="@null"
        android:listSelector="@drawable/bgselected"
        android:scrollbars="none" />
    
  2. 将视图添加到 list_item.xml 考虑为 list_divider

       <View
        android:id="@+id/list_divider"
        android:layout_width="fill_parent"
        android:layout_height="1dip"
        android:background="@android:color/black" />
    
  3. 您可以在选择列表项时删除视图分隔线,就像您在 onItemClick 上选择一样,那么它应该是

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    
        view.findViewById(R.id.list_divider).setVisibility(View.GONE);
    
    }
    

这是一个解决方案,您可以在其中执行任何您想要的自定义行。

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="55dp"
    android:orientation="vertical"

    >

    <TextView
        android:id="@+id/item_complaint"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="20dp"
        android:text="Daily Consumption"
        android:textColor="#505050"
        android:textSize="18sp"
        android:textStyle="bold" />

    <View
        android:id="@+id/item_divider"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_alignParentBottom="true"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:background="#9e9e9e" />


</RelativeLayout>

列表视图

  <ListView
            android:id="@+id/listView_errors"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:divider="@null"
            android:layout_gravity="center_horizontal"
            android:listSelector="@drawable/bgselected"
            android:scrollbars="none" />

适配器

 ArrayAdapter<String> ar = new ArrayAdapter<String>(getActivity(), R.layout.complaint_listview, R.id.item_complaint, errors);
                listErrors.setAdapter(ar);

分频控制器

private int prevSelected = -1;

@Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        selectedError = adapterView.getItemAtPosition(i).toString();
        try {
            controlDividers(i);
        } catch (Exception e) {
            //TODO
        }
    }
    private void controlDividers(int position) {
        if (prevSelected != -1) {
            if (prevSelected == 0) {
                listErrors.getChildAt(prevSelected).findViewById(R.id.item_divider).setVisibility(View.VISIBLE);
            } else {
                listErrors.getChildAt(prevSelected).findViewById(R.id.item_divider).setVisibility(View.VISIBLE);
                listErrors.getChildAt(prevSelected - 1).findViewById(R.id.item_divider).setVisibility(View.VISIBLE);
            }
        }
        if (position == 0) {
            listErrors.getChildAt(position).findViewById(R.id.item_divider).setVisibility(View.INVISIBLE);
        } else {
            listErrors.getChildAt(position).findViewById(R.id.item_divider).setVisibility(View.INVISIBLE);
            listErrors.getChildAt(position - 1).findViewById(R.id.item_divider).setVisibility(View.INVISIBLE);
        }
        prevSelected = position;
    }