2

我有一个ListView,我可以重新排序项目,但每次我退出应用程序并重新启动它时,订单都会恢复到默认值。如果有人能给我答案,也许我能做到这一点的一小部分,我将不胜感激。

示例:我有两个项目和两个链接。谷歌和雅虎。我使用拖放操作ArrayList。一切都很好,只是我不知道如何保存新订单。

我不知道是否有其他方法可以重新订购这些物品。

我使用 CWAC-TOUCHLIST 来执行此操作。

这是我已经走了多远:

    private static String[] items={"Google", "Yahoo"};

    private static String[] links={"http://google.com", "http://yahoo.com"};

    private IconicAdapter adapter=null;

    private IconicAdapter1 adapter2=null;

    ArrayList<String> array= new ArrayList<String>(Arrays.asList(items));

    private ArrayList<String> array2=
        new ArrayList<String>(Arrays.asList(links));

   /** Called when the activity is first created. **/
   @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        TouchListView tlv=(TouchListView)getListView();
        adapter=new IconicAdapter();
        adapter2=new IconicAdapter1();
            setListAdapter(adapter);
        setListAdapter(adapter2);

        tlv.setOnItemClickListener(itemclick);
        tlv.setDropListener(onDrop);

   }

    private TouchListView.DropListener onDrop =
        new TouchListView.DropListener() {
            @Override
            public void drop(int from, int to) {
                String item=(String) adapter.getItem(from);

                adapter.remove(item);
                adapter.insert(item, to);

                String link=(String) adapter2.getItem(from);
                adapter2.remove(link);
                adapter2.insert(link, to);
            }
        };

    private TouchListView.OnItemClickListener itemclick =
        new TouchListView.OnItemClickListener(){
            public void onItemClick(AdapterView<?> parent, View view,
                int from, long id) {

                String item = adapter.getItem(from);

            Toast.makeText(getBaseContext(), "you pick: "+item,
                        Toast.LENGTH_SHORT).show();

                String link = adapter2.getItem(from);
                Intent showContent = new Intent(getApplicationContext(),
                        Web.class);
                showContent.setData(Uri.parse(link));
                startActivity(showContent);
            }
        };

有更聪明的方法吗?

4

1 回答 1

2

您必须将列表及其顺序保存到文件或数据库中。当应用程序启动时,您必须从保存的列表中初始化 ListViews。拖放项目时,您必须保存更改。

您需要更改的方法:您的 drop 方法除了已经执行的操作之外,还应该将更改存储在文件或数据库中。而不是您在 IconicAdapter 和 IconicAdapter2 构造函数(array & array2)中传递的数组,您应该传递保存的数组。

您可以在许多地方阅读如何将数据存储到文件或 SQLite DB。例如,您可以在这里找到一个很好的 SQLite 教程 - http://www.vogella.com/articles/AndroidSQLite/article.html#android_requisites(只有前四个部分是相关的,因为您不必使用内容提供商)。如果您选择使用数据库,您可以创建一个包含以下列的表:项目、链接和订单。在 drop 方法中,您必须更新顺序介于 from 和 to 之间的所有行的 order 列(或者如果列表不是太大,您可以简单地更新所有行并将 order 设置为索引保存列表的数组)。当您从数据库加载表时,您应该按顺序列对其进行排序。

于 2012-06-27T15:31:46.077 回答