由于我无法找到重新排序PreferenceScreen 的方法,因此采用了另一种方法。例如,您可以定义一个Activity,并在两个ListViews 内定义。这个想法是在它们两个上使用visibility 属性,所以每次你都可以设置为visible 其中一个和gone 另一个,或者gone 两者如果你需要做类似于您的第一个屏幕截图。
您需要为它们中的每一个扩展一个ArrayAdapter(或者只有一个ArrayAdapter 并将其用于ListViews,更改布局或初始数据集,或两者兼而有之)。就布局而言,您可以简单地使用LinearLayout 定义一个自定义布局,并在其中定义一个ImageView 和一个TextView,以实现屏幕截图中显示的布局效果,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#000000"
android:orientation="horizontal" >
<ImageView
android:id="@+id/layoutImage"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_weight="2"
android:background="@drawable/..."/>
<TextView
android:id="@+id/layoutText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="8"
android:layout_gravity="left"
android:numLines="1"
android:textSize="18sp" />
</LinearLayout>
定义后,您的自定义ArrayAdapter 的第二个参数是布局,因此您只需将R.id.your_new_layout 引用传递给它,就会使用它创建行。
对于项目的删除,这很容易实现,因为您可以简单地在自定义适配器的 getView() 方法中定义一个 onClickListener() 并从数据集中删除该项目(您将在 ArrayAdapter 中跟踪) . ListView 具有 notifyDataSetChanged() 方法,可以自动从列表中删除项目,您甚至可以添加动画以使其在视觉上更具吸引力。
在这种情况下,重新排序选项似乎是最费力的。 ListView 默认情况下将按“自己的顺序”呈现行,这意味着基本上你会看到它未排序。这可以避免在您的ArrayAdapter 上调用.sort() 方法,但是您也不希望这样做,因为您希望允许您的用户以他们的方式重新排序列表,所以我只有两个想法(他们都没有经过测试):
这种方法的主要好处是您可以将两个数据集放在同一个 Activity 中,这样您就可以访问两个适配器,并且您可以轻松地将数据从一个实例移动到另一个实例,调用 @ 987654354@ 与View.VISIBLE 或View.GONE 对您需要的ListView,所以它使流程更容易。