Элементы ListView сортировать / переупорядочивать и сохранять изменения? - PullRequest
2 голосов
/ 21 февраля 2012

У меня есть ListView, и я могу изменить порядок элементов, но каждый раз, когда я выхожу из приложения и запускаю его снова, порядок возвращается к значению по умолчанию. Буду признателен, если кто-нибудь может дать мне ответ и, возможно, небольшой фрагмент того, как я могу это сделать.

Пример: у меня есть два элемента и две ссылки. Google и Yahoo. Я использую перетаскивание и 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);
            }
        };

Есть ли более разумный способ сделать это?

1 Ответ

2 голосов
/ 27 июня 2012

Вы должны сохранить списки с их порядком либо в файл, либо в БД. При запуске приложения вы должны инициализировать ListViews из сохраненных списков. Когда вы перетаскиваете элемент, вы должны сохранить изменения.

Метод, который необходимо изменить: Ваш метод удаления должен, в дополнение к тому, что он уже делает, хранить изменения в файле или БД. Вместо массивов, которые вы передаете в конструкторы IconicAdapter и IconicAdapter2 (array & array2), вы должны передать сохраненные массивы.

Вы можете прочитать во многих местах, как хранить данные в файле или БД SQLite. Например, вы можете найти хорошее руководство по SQLite здесь - http://www.vogella.com/articles/AndroidSQLite/article.html#android_requisites (релевантны только первые четыре раздела, так как вам не нужно использовать ContentProvider). Если вы решите использовать БД, вы можете создать таблицу, которая содержит следующие столбцы: элемент, ссылка и порядок. В методе drop вам необходимо обновить столбец порядка для всех строк, чей порядок находится между и до (или, если списки не слишком велики, вы можете просто обновить все строки и установить порядок в качестве индекса в массив, который содержит список). При загрузке таблицы из БД вы должны упорядочить ее по столбцу заказа.

...