Загрузить изображение с помощью onClickListener - PullRequest
0 голосов
/ 31 июля 2011

У меня есть класс, который я позаимствовал у здесь , который загружает изображение с URL-адреса.Я пытаюсь использовать класс, вызывая его из onClickListener (если это имеет смысл), но я не уверен, как вызвать класс и показать результаты.Прямо сейчас я просто работаю со статическим URL, но в конечном итоге я буду динамическим.

OnclickListerner в MainActivity Java:

list.setOnItemClickListener(new OnItemClickListener() {

    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3){
        showImage go = new showImage();
    }

});

, и это мой класс showImage:

package com.flash_tattoo;

public class showImage extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fullimage);

        ImageView imgView =(ImageView)findViewById(R.id.ImageView01);
        String url = null;
        Drawable drawable = LoadImageFromWebOperations("http://www.androidpeople.com/wp-content/uploads/2010/03/android.png");
        imgView.setImageDrawable(drawable);

    }

    private Drawable LoadImageFromWebOperations(String url) {
        try {
            InputStream is = (InputStream) new URL(url).getContent();
            Drawable d = Drawable.createFromStream(is, "src name");
            return d;
        } catch (Exception e) {
            System.out.println("Exc="+e);
            return null;
        }
    }
}

Нужно ли вызывать новый макет и затем присоединять к нему мой объект showImage?Любая помощь будет отличной.Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 31 июля 2011

Нет необходимости вызывать новый макет, вы можете поместить одну кнопку и ImageView в макет и установить изображение, как вы сделали.Ваш код работает правильно, я проверил.Надеюсь, вы могли дать разрешение в файле AndroidManifyt.

0 голосов
/ 31 июля 2011

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

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

Чтобы ответить на оригинальный вопрос, похоже, что showImage - это Activity. Это означает, что внутри слушателя вам не нужно создавать новый объект showImage, а нужно запустить Intent, чтобы просмотреть Activity. Предполагая, что у вас есть правильные файлы макетов, я не вижу ничего, что не будет работать здесь.

Похоже, у вас также есть неиспользуемая переменная, String url = null; не требуется.

Редактировать: Вы также не должны использовать System.out.println(), хотя это даст желаемые результаты. Стандартный метод входа в Android - использование системы LogCat .

Как уже упоминал suri, необязательно иметь совершенно новый Activity, чтобы показать ваше изображение. Если вы переместили функции класса showImage в свой первый Activity и добавили ImageView к первому макету, вы можете загрузить изображение в том же Activity, что и у кнопки.

0 голосов
/ 31 июля 2011

Одно из возможных решений: 1) Создать AsyncTask для загрузки изображения; 2) Используйте функцию обратного вызова для уведомления о результате загрузки; 3) В обратном вызове установите ваше изображение.

Обратите внимание, что если вы хотите установить изображение не из потока пользовательского интерфейса, вы должны использовать runOnUiThread

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