Как сохранить уникальную картинку для Android ListItem - PullRequest
0 голосов
/ 05 августа 2011

Моя проблема в этом (не позволяйте параграфу запугать вас, мой вопрос довольно прост, я считаю ):

В MainActivity(A) у меня есть listView,Когда я нажимаю на элемент в listView, я перехожу ко второму activity(B)activity B у меня есть кнопка, которая позволяет пользователю делать снимки.Теперь я сохраняю эту картинку под именем файла.Поскольку я хочу, чтобы изображение каждого listItem было уникальным, я задаю имя файла изображения для позиции этого элемента.Например, если я нажму item#1 в списке, имя соответствующей картинки будет "1".Все это работает очень хорошо, за исключением случаев, когда я удаляю элемент.Затем, когда я добавляю другой элемент в ту же позицию, мой код загружает существующее изображение для этого элемента.Например, если у меня есть изображение под названием '2', сохраненное для item2,, это нормально.когда я удаляю эту запись и добавляю другой элемент, который является новым item2, мой код проверяет, «существует ли имя картинки '2' существует?».Если да, то установите изображение этой записи на это.Очевидно, что это другая запись, и я не хочу, чтобы это произошло.Возможно, я мог бы удалить картинку вместе с элементом, но я понятия не имею, как это сделать.

Надеюсь, я хорошо объяснил свою логику.Единственная причина, по которой я использую позицию, заключается в том, что это единственная уникальная вещь в предмете, которую я могу найти.Кстати (не уверен, что это актуально), я передаю позицию элемента в качестве дополнительного в намерении между Activity A и Activity B.

Как я могу решить эту проблему или использовать обходной путь?Спасибо!

РЕДАКТИРОВАТЬ 1:

Facepalm. Просматривая комментарии, я понимаю, что удаление его (как я уже говорил ранее) ^^способ сделать это.Может ли кто-нибудь сказать мне, как это сделать тогда?

Этот код я использую для сохранения изображения:

private void setImage() {
    if (loadPicture(getIntent().getStringExtra("position"), bitmap) != null) {
        // Toast.makeText(this, "not null", Toast.LENGTH_SHORT).show();
        imageView.setImageBitmap(loadPicture(
                getIntent().getStringExtra("position"), bitmap));
    }
}

private void savePicture(String filename, Bitmap b, Context ctx) {
    try {
        // ObjectOutputStream bos;
        FileOutputStream out;// = new FileOutputStream(filename);
        out = ctx.openFileOutput(filename, Context.MODE_WORLD_READABLE);
        // bos = new ObjectOutputStream(out);
        b.compress(Bitmap.CompressFormat.JPEG, 40, out);
        if (b.compress(Bitmap.CompressFormat.JPEG, 40, out) == true)
            // Toast.makeText(this, "returned true",
            // Toast.LENGTH_LONG).show();

            // bos.flush();
            // bos.close();
            out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Приветствия.

Ответы [ 3 ]

0 голосов
/ 05 августа 2011

Я не хочу наступать на ответ Дж. Б. Низета, но я дам другое предложение. Используя SimpleCursorAdapter и SqliteDatabase , вы можете избежать управления цифровыми ключами любого типа. Просто удерживайте путь к файлу в базе данных вместе с любой другой связанной информацией для пользователя, настройте ViewBinder и вы отправитесь в гонку. Связыватель - это очень гибкий способ визуализации данных и даже условного рендеринга объектов View.

0 голосов
/ 07 августа 2011

Я решил эту проблему, увеличивая счетчик каждый раз, когда добавлял элемент, и сохраняя этот счетчик во внутренней памяти. Таким образом, это не было основано на позиции и не испортилось, когда я удалил элемент. Я надеюсь, что это продолжает работать, поскольку я делаю изменения в моем приложении. Спасибо всем за помощь.

0 голосов
/ 05 августа 2011

Ответ в вопросе: удаляйте файл при удалении элемента.File.delete() - это метод, который вы, вероятно, ищете.Вам также придется переименовать другие файлы, если элемент не последний в списке.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...