Гость
Форумы / Android [игнор отключен] [закрыт для гостей] / Не работает findViewById в собственном Адаптере / 15 сообщений из 15, страница 1 из 1
04.12.2014, 10:03
    #38824520
Мозговой_слизень
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает findViewById в собственном Адаптере
Уж простите инвалида умственного труда, сами мы не местные. В общем я создал свой адаптер со своим шаблоном для того, чтобы кастомизировать отображение ListView.
Проблема вот в чем, в методе onPreExecute() я никак не могу обратиться в элементу моего XML-шаблона для того, чтобы сделать активным ProgressBar (типа картинка грузится в данный момент).

Код такой:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  
      protected void onPreExecute() 
     {
            super.onPreExecute();          
            //LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);// - ошибку не выдает
            //View rowView = inflater.inflate(R.layout.images_list, null); // - ошибку не выдает
            //ProgressBar linlaHeaderProgress = (ProgressBar)rowView.findViewById(R.id.progressBar);// даже прогресс бар вроде нашли
            //linlaHeaderProgress.setVisibility(View.VISIBLE); // пытаюсь сделать его видимым а хрен, ему пофиг
            bmImage.setImageResource(R.drawable.clock); // поэтому как инвалид тупо картинку вставляю с надписью "Загрузка".
         }



Че за ботва, а?
...
Рейтинг: 0 / 0
04.12.2014, 10:14
    #38824534
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает findViewById в собственном Адаптере
Мозговой_слизень, что мешает прогресс бар располагать в корне активити? Или тебе нужно, чтоб каждая строка отображала занятость?
...
Рейтинг: 0 / 0
04.12.2014, 10:14
    #38824535
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает findViewById в собственном Адаптере
Мозговой_слизеньonPreExecute()
Это откуда?
...
Рейтинг: 0 / 0
04.12.2014, 10:31
    #38824565
Мозговой_слизень
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает findViewById в собственном Адаптере
wadmanМозговой_слизень, что мешает прогресс бар располагать в корне активити? Или тебе нужно, чтоб каждая строка отображала занятость?
Мы имеем список из 30-ти "пунктов", в каждом пункте текст и картинка. Пока картинка грузится, я бы хотел отобразить статусбар вместо каждой картинки. Кароче я тупо запутался.
Вот весь код, не кидайте сильно тапками:


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
public class MyAdapter extends ArrayAdapter<String> {

    private final Context context;
    private final String[] values;



    public MyAdapter(Context context, String[] values) {

        super(context, R.layout.images_list, values);
        this.context = context;
        this.values = values;
        //linlaHeaderProgress = (ProgressBar)findViewById(R.id.progressBar3);
    }


    @Override
    public View getView (int position, View convertView, ViewGroup parent)
    {

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);// назначили какую-то хуйню
        View rowView = inflater.inflate(R.layout.images_list, parent, false); // назначили новой хуйне мой шаблон

        TextView textView = (TextView)rowView.findViewById(R.id.label); // взяли ID текстовой метки из моего шаблона
        TextView textView2 = (TextView)rowView.findViewById(R.id.label2);
        ProgressBar linlaHeaderProgress = (ProgressBar)rowView.findViewById(R.id.progressBar);

        ImageView image = (ImageView)rowView.findViewById(R.id.icon);

        String artNoSeparated = values[position]; // переназначили переменную для удобства
        String[] textArray=artNoSeparated.split("--------");// получили массив

        textView2.setText(textArray[1]); // установили часть текста - URL.
        textView.setText(textArray[0]); // установили часть текста - артикул и остаток.
        String s = values[position];


        new DownloadImageTask(image).execute(textArray[1]); // а теперь видно по Execute
        //linlaHeaderProgress.setVisibility(View.GONE); // а потом типа и прогресс исчезает
        return rowView;

    }



    private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> //грузим изображение 2
    {
        ImageView bmImage;

        public DownloadImageTask(ImageView bmImage) //это метод просто так, для удобства
        {
            this.bmImage = bmImage;
        }

        protected Bitmap doInBackground(String... urls) // другой поток
        {



            String urldisplay = urls[0];
            Bitmap mIcon11 = null;
            try {

                InputStream in = new java.net.URL(urldisplay).openStream();
                mIcon11 = BitmapFactory.decodeStream(in);
            }
            catch (Exception e)
            {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }
            return mIcon11;
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();


            //LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);// назначили какую-то хуйню
            //View rowView = inflater.inflate(R.layout.images_list, null); // назначили новой хуйне мой шаблон
            //ProgressBar linlaHeaderProgress = (ProgressBar)rowView.findViewById(R.id.progressBar);
            //linlaHeaderProgress.setVisibility(View.VISIBLE);
            bmImage.setImageResource(R.drawable.clock);
            //bmImage.setVisibility(View.GONE);


        }
        protected void onPostExecute(Bitmap result) // при выполнении обращение к UI
        {
            bmImage.setVisibility(View.VISIBLE);
            bmImage.setImageBitmap(result);


            LayoutInflater inflater =  (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View row = inflater.inflate(R.layout.images_list, null);
            TextView thumb = (TextView) row.findViewById(R.id.label);
            thumb.setText("111");
            ProgressBar linlaHeaderProgress = (ProgressBar)row.findViewById(R.id.progressBar);
            linlaHeaderProgress.setVisibility(View.VISIBLE);

           // bmImage.setVisibility(View.VISIBLE);
            //linlaHeaderProgress.setVisibility(View.VISIBLE);

        }
    }



Проблема в том, что я никак не могу достучаться из методов onPostExecute и onPreExecute до прогрессбара в моем XML-шаблоне:
Код: java
1.
2.
ProgressBar linlaHeaderProgress = (ProgressBar)row.findViewById(R.id.progressBar);
linlaHeaderProgress.setVisibility(View.VISIBLE); // не реагирует но и ошибку не выдает
...
Рейтинг: 0 / 0
04.12.2014, 10:36
    #38824568
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает findViewById в собственном Адаптере
Мозговой_слизень, в getView сделай ViewHolder , который и передавай а AssyncTask. А то что ты тут нагородил, оно не к нужной строке обращается, а к новому шаблону.
...
Рейтинг: 0 / 0
04.12.2014, 10:56
    #38824590
Мозговой_слизень
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает findViewById в собственном Адаптере
ща буду разбираться, спасибо.
...
Рейтинг: 0 / 0
04.12.2014, 15:14
    #38825000
Мозговой_слизень
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает findViewById в собственном Адаптере
wadmanМозговой_слизень, в getView сделай ViewHolder , который и передавай а AssyncTask .
ниифга не понял, а как передать?
...
Рейтинг: 0 / 0
04.12.2014, 15:20
    #38825008
Мозговой_слизень
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает findViewById в собственном Адаптере
Мозговой_слизеньwadmanМозговой_слизень, в getView сделай ViewHolder , который и передавай а AssyncTask .
ниифга не понял, а как передать?
в том-то и дело, что класс DownloadImageTask не видит ничего из getView.
...
Рейтинг: 0 / 0
04.12.2014, 15:33
    #38825027
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает findViewById в собственном Адаптере
Мозговой_слизеньwadmanМозговой_слизень, в getView сделай ViewHolder , который и передавай а AssyncTask .
ниифга не понял, а как передать?
Смотрел тут 14774902 ? в getView в тэг засовываешь ViewHolder и потом тэг и передаешь.
Мозговой_слизеньв том-то и дело, что класс DownloadImageTask не видит ничего из getView.
Дак передавать нужно.
...
Рейтинг: 0 / 0
04.12.2014, 15:40
    #38825041
Мозговой_слизень
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает findViewById в собственном Адаптере
wadmanМозговой_слизеньпропущено...

ниифга не понял, а как передать?
Смотрел тут 14774902 ? в getView в тэг засовываешь ViewHolder и потом тэг и передаешь.
Мозговой_слизеньв том-то и дело, что класс DownloadImageTask не видит ничего из getView.
Дак передавать нужно.

Лвдно, хорошо. А нафига нужен ViewHolder? Я тока что с ним попробовал, у меня почему-то в каждой строке картинки начали динамически меняться. Но даже не в этом суть. Просто как-нибудь передать можно без тега?
...
Рейтинг: 0 / 0
04.12.2014, 15:43
    #38825050
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает findViewById в собственном Адаптере
Мозговой_слизеньА нафига нужен ViewHolder?
Как раз для твоего случая.
Мозговой_слизеньЯ тока что с ним попробовал, у меня почему-то в каждой строке картинки начали динамически меняться.
Значит что-то делаешь не так.
...
Рейтинг: 0 / 0
04.12.2014, 15:54
    #38825069
Мозговой_слизень
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает findViewById в собственном Адаптере
wadmanМозговой_слизеньА нафига нужен ViewHolder?
Как раз для твоего случая.
Мозговой_слизеньЯ тока что с ним попробовал, у меня почему-то в каждой строке картинки начали динамически меняться.
Значит что-то делаешь не так.

Так, получилось с косяком но мне понять главное как передать тег в AsyncTask. Как это сделать?
...
Рейтинг: 0 / 0
04.12.2014, 16:16
    #38825113
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает findViewById в собственном Адаптере
Мозговой_слизеньТак, получилось с косяком но мне понять главное как передать тег в AsyncTask. Как это сделать?
А как ты строку передаешь?
Мозговой_слизень
Код: java
1.
new DownloadImageTask(image).execute(textArray[1]); // а теперь видно по Execute
...
Рейтинг: 0 / 0
04.12.2014, 16:29
    #38825137
Мозговой_слизень
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает findViewById в собственном Адаптере
wadmanМозговой_слизеньТак, получилось с косяком но мне понять главное как передать тег в AsyncTask. Как это сделать?
А как ты строку передаешь?
Мозговой_слизень
Код: java
1.
new DownloadImageTask(image).execute(textArray[1]); // а теперь видно по Execute



да, тока как передать туда тег, да еще и допилить класс, чтобы этот тег принять, это как-то слишком сложно для меня.
...
Рейтинг: 0 / 0
04.12.2014, 16:43
    #38825153
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает findViewById в собственном Адаптере
Мозговой_слизеньwadmanпропущено...

А как ты строку передаешь?
пропущено...


да, тока как передать туда тег, да еще и допилить класс, чтобы этот тег принять, это как-то слишком сложно для меня.
Шутишь? Если нет, то здесь
Мозговой_слизень
Код: java
1.
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> //грузим изображение 2


ты задаешь тип параметра, который передаешь в execute
Мозговой_слизень
Код: java
1.
new DownloadImageTask(image).execute(textArray[1]); // а теперь видно по Execute
...
Рейтинг: 0 / 0
Форумы / Android [игнор отключен] [закрыт для гостей] / Не работает findViewById в собственном Адаптере / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]