2012-02-21 120 views
2

我有一个ListView,我可以重新排序项目,但每次退出应用程序并重新启动它时,订单就会回到默认状态。我很感激,如果有人能给我答案,也许我可以做一些小片段。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); 
      } 
     }; 

有一个更聪明的办法做到这一点?

回答

2

您必须将他们的订单保存到文件或数据库中。 当应用程序启动时,您必须从保存的列表中初始化ListViews。 当您拖动&删除一个项目时,您必须保存更改。

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

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