有没有一种方法可以在Android Studio中以编程方式对线性布局进行排序?

时间:2018-10-02 22:46:10

标签: java android android-studio android-layout

我有一个用于Android的笔记应用程序,其中为用户保存的每个笔记增加了LinearLayout“笔记卡”。它们的父级是LinearLayout内的ScrollLayout(这似乎是使它工作的唯一方法)。这些卡片由标题,正文,位置标签和创建时间组成。

我想知道是否可以构建一种方法来查看位置,日期或标题并按顺序对布局进行排序?

我一直在寻找List Views,以确定它是否是更好的父级,但是我仍然无法确定我是否能够对ListView中的布局进行排序。

2 个答案:

答案 0 :(得分:0)

我建议使用RecyclerView。您需要为其设置一个适配器,但是管理多个项目更容易(您可以对其重新排序,添加滑动或按住操作等)。您还可以使用TreeSet之类的元素对项目进行排序。

您可能需要一个数据类作为注释,所以像这样:

class NoteData implements Comparable {
    public String title;
    public String text;
    public long timeInMs;
    //etc

    @Override
    public int compareTo(NoteData other) {
        return title.compareTo(other.title);
    }

}

然后,在RecyclerView适配器中,您可以拥有一个TreeSet的NoteData对象。 TreeSet使用Comparable接口(如果有)自动为您订购商品(这就是我在上面实现的原因)。 TreeSet默认情况下按升序排序,但是您可以将Collections.reverseOrder()传递给TreeSet构造函数以使其降序。

在我的示例中,我按标题排序。您可以在编译之前更改要比较的变量,但是我所做的不支持动态排序。为此,您将需要进行一些Google搜索,以获取有关如何对列表进行动态排序的示例(为此,您应该使用ArrayList或Set而不是TreeSet)或可以为您执行此操作的库。

Google's RecyclerView tutorial
Another tutorial

答案 1 :(得分:0)

如果需要LayoutInflater。假设您的示例XML位于文件custom_layout.xml中:

LayoutInflater充气器= LayoutInflater.from(上下文); RelativeLayout layout =(RelativeLayout)inflater.inflate(R.layout.custom_layout,null,false);

LinearLayout linear =(LinearLayout)findViewById(R.id.myLayout); linear.addView(layout);

看看Droid:如何以编程方式重新排列线性布局的内容?并立即在LinearLayout中获取所有子视图