应用偏好设置的可编辑项目列表?

时间:2014-03-08 03:47:17

标签: android uitableview listview

我正在尝试在我的应用偏好设置上执行类似于iOS可编辑UITableView的操作。基本上它是一个列表,用户可以添加项目,删除它们或重新排序它们。我确定这是一个常见的问题,但我没有找到任何关于如何做的例子。

现在我试图通过嵌套两个PreferenceScreens并在它们之间移动项目来实现它:

enter image description here

我将项目存储在两个不同的数组(“已添加”项目和“未添加”项目)上,并使用addPreference()动态构建两个屏幕但是我不确定这是不是一个好主意,也不知道如何让用户删除和重新排序项目。

如何做到这一点?

3 个答案:

答案 0 :(得分:1)

由于我无法找到重新排序PreferenceScreen的方法,因此还有另一种方法。例如,您可以定义Activity,并在两个ListView内定义。我们的想法是在两者上都使用visibility属性,因此每次设置为visible其中一个,gone另一个,或gone如果您需要执行第一次截图等操作,请同时使用这两种方法。

您需要为每个ArrayAdapter扩展ArrayAdapter(或只有一个ListView,并将其用于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的第二个参数就是布局,因此您只需将onClickListener()引用传递给它,然后使用它创建行。

对于项目的删除,它很容易实现,因为您可以在自定义适配器的getView()方法中定义ArrayAdapter并从数据集中删除该项目(您将在其中跟踪ListView)。 notifyDataSetChanged()使用ListView方法自动从列表中删除项目,您甚至可以添加动画以使其在视觉上更具吸引力。

在这种情况下,重新排序选项似乎是最费力的。默认情况下,.sort()将以“自己的顺序”呈现行,这意味着您基本上会看到它未排序。这可以避免在ArrayAdapter上调用onDragEvent方法,但您不希望这样,因为您希望允许用户按照自己的方式对列表进行重新排序,因此我只有2个想法来在我看来(没有测试过):

  • 尝试使用ListView 实现此目的。根据{{​​3}},您可以处理拖动List行以处理某些事件。通过这种方式,您可以看到用户放弃该项目的位置,并重新排序Adapter中的Activity以保持这种状态。

  • 外部库。似乎有一些外部库已经实现了这一点,例如,您可能希望看到thisthisthis

这种方法的主要好处是你可以将两个数据集放在同一个setVisibility()中,在这里你可以使两个适配器都可以访问,你可以轻松地将数据从一个实例移动到另一个实例,在您需要的View.VISIBLE上使用View.GONEListView调用{{1}},这样可以简化流程。

答案 1 :(得分:0)

没有直截了当的方法 但是this实现应该是你需要的,稍微调整一下 从here下载源代码。

答案 2 :(得分:0)

我建议您使用DragSortListView,就像您可以在Google Play音乐中找到的那样。

This implementation特别好,既易于整合又极其高效。它应该适合您重新排序/删除部分的需要。