2

を持っていて、ListViewアイテムを並べ替えることができますが、アプリを終了して再起動するたびに、順序はデフォルトに戻ります。誰かが私に答えてくれて、そして多分私がそれをする方法の小さな断片を教えてくれたら幸いです。

例:2つのアイテムと2つのリンクがあります。グーグルとヤフー。ドラッグアンドドロップを使用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

リストをその順序とともにファイルまたはDBに保存する必要があります。アプリケーションが起動したら、保存されたリストからListViewsを初期化する必要があります。アイテムをドラッグアンドドロップするときは、変更を保存する必要があります。

変更する必要のあるメソッド:dropメソッドは、すでに行っていることに加えて、変更をファイルまたはDBに保存する必要があります。IconicAdapterおよびIconicAdapter2コンストラクター(arrayおよびarray2)で渡す配列の代わりに、保存された配列を渡す必要があります。

データをファイルまたはSQLiteDBに保存する方法をさまざまな場所で読むことができます。たとえば、SQLiteの優れたチュートリアルはここにあります-http: //www.vogella.com/articles/AndroidSQLite/article.html#android_requisites (最初の4つのセクションのみが関連しているのは、を使用する必要がないためです。 ContentProvider)。DBを使用する場合は、アイテム、リンク、および順序の列を含むテーブルを作成できます。dropメソッドでは、fromとtoの間の順序を持​​つすべての行の順序列を更新する必要があります(または、リストが大きすぎない場合は、すべての行を更新して、順序をインデックスに設定するだけです。リストを保持する配列)。DBからテーブルをロードするときは、注文列で並べ替える必要があります。

于 2012-06-27T15:31:46.077 に答える