Android ListActivity onListItemClick вызывает адаптер getView - PullRequest
3 голосов
/ 17 февраля 2011

У меня очень простое действие, расширяющее 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 Ответ

1 голос
/ 17 февраля 2011

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

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

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

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

...