Android ListActivity onListItemClick вызывает адаптер getView

У меня есть очень простое действие, которое расширяет ListActivity. Я переопределяю метод onListItemClick для выполнения некоторых пользовательских операций.

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

Теперь я хотел бы знать, правильное ли это поведение или нет. Если это так, у меня может быть проблема.

Проблема в том, что в моих элементах списка есть изображения, которые извлекаются из Интернета, и когда я нажимаю на элемент списка, вызов адаптера вызывает вызовы в Интернет, обновляя изображения в списке и по какой-то причине портя их.

Кто-нибудь может затенить свет?

это мое getView:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ContentListItemView cv = null;
        if (convertView == null) {
            LayoutInflater inflater = LayoutInflater.from(this.context);
            convertView = (RelativeLayout) inflater.inflate(this.layout, null);
            cv = new ContentListItemView(convertView);
        } else {
            cv = (ContentListItemView) convertView.getTag();
        }
        Log.d(this.getClass().getSimpleName(), "position: " + position);
        cv.init(getItem(position));
        convertView.setTag(cv);
        return convertView;
    }

а это мой OnListItemClick

protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        //Log.d(this.getClass().getSimpleName(), position + " " + id);
        Intent contentDetailsIntent = new Intent(this, ContentDetailsActivity.class);
        contentDetailsIntent.putExtra("com.tamtamy.jatta.content_list_item_selected", position);
        contentDetailsIntent.putExtra("com.tamtamy.jatta.datasource", ContentDetailsActivity.CONTENT_LIST);
        contentDetailsIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(contentDetailsIntent);
    }

1 ответ

Решение

Если это происходит, то это не очень важно, правильно это или нет, это то, с чем вам приходится иметь дело.

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

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

Загляните в многопоточное сообщение в блоге разработчиков Android для Google, где обсуждается загрузка изображений и есть ссылка на пример кода Google, который должен дать вам хороший пример того, как решить проблемы с загрузкой изображений.

Другие вопросы по тегам