我正在尝试在我的应用偏好设置上执行类似于iOS可编辑UITableView的操作。基本上它是一个列表,用户可以添加项目,删除它们或重新排序它们。我确定这是一个常见的问题,但我没有找到任何关于如何做的例子。
现在我试图通过嵌套两个PreferenceScreens并在它们之间移动项目来实现它:
我将项目存储在两个不同的数组(“已添加”项目和“未添加”项目)上,并使用addPreference()
动态构建两个屏幕但是我不确定这是不是一个好主意,也不知道如何让用户删除和重新排序项目。
如何做到这一点?
答案 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
以保持这种状态。
这种方法的主要好处是你可以将两个数据集放在同一个setVisibility()
中,在这里你可以使两个适配器都可以访问,你可以轻松地将数据从一个实例移动到另一个实例,在您需要的View.VISIBLE
上使用View.GONE
或ListView
调用{{1}},这样可以简化流程。
答案 1 :(得分:0)
答案 2 :(得分:0)
我建议您使用DragSortListView
,就像您可以在Google Play音乐中找到的那样。
This implementation特别好,既易于整合又极其高效。它应该适合您重新排序/删除部分的需要。