Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.66
Shuran33
0 / 0 / 0
Регистрация: 21.02.2011
Сообщений: 7
#1

Как обработать нажатие ImageView - Программирование Android

12.11.2012, 00:32. Просмотров 5009. Ответов 16
Метки нет (Все метки)

Создаю программу на Андроиде. И сразу столкнулся с проблемой. Почему то не получается...
Создаю три объекта ImageView, и надо при нажатии на одну из картинок, чтобы она заменялась новой. Как это реализовать? Может кто подскажет?

Добавлено через 1 час 4 минуты
И вобще, такой код правильный?
Java
1
2
3
4
5
6
7
8
9
ImageView img = (ImageView) findViewById(R.id.imageView1);
img.setOnClickListener(new View.OnClickListener() {
            
    @Override
    public void onClick(View v) {
             //  как тут заменить картинку?
    }
        
});
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2012, 00:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как обработать нажатие ImageView (Программирование Android):

Как обработать нажатие на ImageView? - Программирование Android
Ребят, не пойму в чем ошибка, как обработать нажатие на картинку? public class MainActivity extends ActionBarActivity implements...

Как обработать нажатие на изображение в элементе listView? - Программирование Android
Как все знают, listView делится на множество элементов, нажатия на них можно обработать... Но во многих listView помимо тескат часто...

Двойное нажатие на ImageView - Программирование Android
Как реализовать метод двойного нажатия на ImageView ? Добавлено через 4 минуты p.s. По быдлоскому и сам могу :) Может есть...

ImageView не работает нажатие - Программирование Android
Создал ImageView в layout с названием vkontakte Создал Main2Activity В Манифесте прописал Main2Activity Далее в Main2Activity...

Как в ListView обработать нажатие кнопки и изменить здесь же значение в textView ? - Программирование Android
У меня есть ListView, у него есть своя разметка на которой находится строчки на каждой из которых Button и textView. Как мне обработать...

Как обработать нажатие кнопки "Назад", чтобы открывался рекламный баннер? - Программирование Android
Требуется помощь. Начал осваивать это все недавно. Расскажу суть идеи: создав проект в Android Studio, был выбран активити "Google AdMob...

16
NeComilfo
0 / 0 / 0
Регистрация: 11.11.2012
Сообщений: 7
12.11.2012, 02:04 #2
Доброй ночи! Я очень новичок в программировании под андроид(меньше недели) и вообще в программировании. Код, наверное, очень кривой. Я думаю, что будет как-то так. У меня заработало.
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
public class MainActivity extends Activity implements OnClickListener {
        
    @Override    
    public void onCreate(Bundle savedInstanceState) {       
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        ImageButton imgbut = (ImageButton) findViewById(R.id.imageButton1);        //просто имаджбаттон для примера
        image.setOnClickListener(this);
        
        ImageView imag = (ImageView) findViewById(R.id.imageView1);  
        imag.setClickable(true);        
        imag.setOnClickListener(this);
    }  
    
    public void onClick(View v){ 
        switch (v.getId()) {
        case R.id.imageView1:
            ImageView imag = (ImageView) findViewById(R.id.imageView1);
            imag.setClickable(true);
            imag.setImageDrawable(getResources().getDrawable(R.drawable.ic_action_search));
            break;
        case R.id.imageButton1:
            TextView textv = (TextView) findViewById(R.id.textView1);
            textv.setText("ололо пыщ пыщ");
            break;
        default:
            break;
        }
            
    }
Добавлено через 8 минут
Java
1
imag.setClickable(true);
можно везде удалять. работает и без этого.
Буду очень благодарен, если кто-нибудь покритикует то, что я написал тут!
0
Shuran33
0 / 0 / 0
Регистрация: 21.02.2011
Сообщений: 7
12.11.2012, 12:59  [ТС] #3
NeComilfo, спасибо, работает как надо.
0
kvaka
31 / 31 / 3
Регистрация: 26.06.2012
Сообщений: 166
14.11.2012, 10:37 #4
Что касается критики:
Объекты надо создавать 1 раз - как правило в onCreate. Не делайте лишних действий и не засоряйте код.
В данном случае в switch пункт default бесполезен и не нужен
0
Shuran33
0 / 0 / 0
Регистрация: 21.02.2011
Сообщений: 7
14.11.2012, 11:03  [ТС] #5
Цитата Сообщение от kvaka Посмотреть сообщение
Что касается критики:
Объекты надо создавать 1 раз - как правило в onCreate. Не делайте лишних действий и не засоряйте код.
В данном случае в switch пункт default бесполезен и не нужен
То есть как я понял:
ImageView imag = (ImageView) findViewById(R.id.imageView1);
imag.setClickable(true);
imag.setOnClickListener(this);
}

public void onClick(View v){
switch (v.getId()) {
case R.id.imageView1:
ImageView imag = (ImageView) findViewById(R.id.imageView1);
imag.setClickable(true);
imag.setImageDrawable(getResources().getDrawable(R.drawable.ic_action_search));
break;


Красным выделил создание 2х объектов? Это имеешь ввиду?
А как же тогда использовать 1 объект?

в методе onClick не надо создавать еще раз объект imag?
0
kvaka
31 / 31 / 3
Регистрация: 26.06.2012
Сообщений: 166
14.11.2012, 12:37 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
именно так - ты создаешь их как переменные, а как правило нужно создавать их как поля класса.
Вообще твой класс должен выглядеть примерно так:
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
public class MainActivity extends Activity implements OnClickListener {
 
    private TextView textv;
    private ImageButton imgbut;
    private ImageView imag;
  
    @Override    
    public void onCreate(Bundle savedInstanceState) {       
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        imgbut = (ImageButton) findViewById(R.id.imageButton1);        //просто имаджбаттон для примера
        textv = (TextView) findViewById(R.id.textView1);
        imag = (ImageView) findViewById(R.id.imageView1);
 
        imgbut.setOnClickListener(this);          
        imag.setOnClickListener(this);
    }  
    
    public void onClick(View v){ 
        switch (v.getId()) {
        case R.id.imageView1:
            v.setImageResource(R.drawable.ic_action_search);
            break;
        case R.id.imageButton1:
            textv.setText("ололо пыщ пыщ");
        }          
    }
3
NeComilfo
0 / 0 / 0
Регистрация: 11.11.2012
Сообщений: 7
14.11.2012, 14:10 #7
Спасибо! А то я комплексовал из-за того, что приходится несколько раз объявлять одно и то же, но не знал как этого избежать.)
0
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
17.11.2012, 17:32 #8
Я вас всех огорчу, но даже полями класса делать не нужно, в метод onClick уже приходит нужный View и можете работать напрямую с ним.
0
Shuran33
0 / 0 / 0
Регистрация: 21.02.2011
Сообщений: 7
17.11.2012, 19:13  [ТС] #9
Цитата Сообщение от silentnuke Посмотреть сообщение
Я вас всех огорчу, но даже полями класса делать не нужно, в метод onClick уже приходит нужный View и можете работать напрямую с ним.
Можно короткий пример, как использовать нужный View?
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
17.11.2012, 21:26 #10
Цитата Сообщение от Shuran33 Посмотреть сообщение
Можно короткий пример, как использовать нужный View?
в коде Кваки все правильно написано.
1
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
17.11.2012, 21:44 #11
Цитата Сообщение от V0v1k Посмотреть сообщение
в коде Кваки все правильно написано.
да ладно?)
объявлено не используемое поле класса.
метод onClick не валидный, ибо метод setimageresource дергается у базового класса, у которого данного метода нету, тобишь нужен каст, продолжать?
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
17.11.2012, 22:10 #12
ну да, каст нужен, но в основном то правильно, именно так, как ты писал, а поля там лишь для примера, читайте внимательней.
0
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
17.11.2012, 22:15 #13
Цитата Сообщение от V0v1k Посмотреть сообщение
ну да, каст нужен, но в основном то правильно, именно так, как ты писал, а поля там лишь для примера, читайте внимательней.
прежде чем говорить, сами бы тему почитали, и поля там как раз не для примера.
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
17.11.2012, 22:49 #14
именно для примера. при многократном использовании не нужно постоянно вызывать findViewById.
Цитата Сообщение от kvaka Посмотреть сообщение
Объекты надо создавать 1 раз - как правило в onCreate. Не делайте лишних действий и не засоряйте код.
Цитата Сообщение от kvaka Посмотреть сообщение
ты создаешь их как переменные, а как правило нужно создавать их как поля класса.
Добавлено через 30 минут
главное саму суть написать, не всегда есть возможность проверить на валидность...
0
kvaka
31 / 31 / 3
Регистрация: 26.06.2012
Сообщений: 166
17.11.2012, 22:53 #15
В данном случае я показал простейшую и очень понятную структуру кода. Все поля, кстати используются: 2 для объявления слушателя, 3-е - в слушателе. К слову, объективная критика на мой код тоже принимается, так что я был бы рад увидеть более грамотный код. И не забывайте, что тему создал новичок и отвечаем мы прежде всего ему.
1
17.11.2012, 22:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2012, 22:53
Привет! Вот еще темы с ответами:

Обработать нажатие на кнопки в уведомлении - Программирование Android
Еще раз здравствуйте. Дело такое. Есть уведомление, в нем две кнопки. Они должны выполнять различные действия (вызов методов)....

Не получается обработать нажатие на кнопку Home в ActionBar - Программирование Android
в OnCreate прописал: ActionBar actionbar= getSupportActionBar(); actionbar.setDisplayHomeAsUpEnabled(true); Теперь хочу...

Скопировать картинку из одной ImageView в другую ImageView - Программирование Android
В ImageView поставлена картинка методом setImageResource. По нажатию на неё, нужно такую-же картинку поставить в другую вью, а в первой...

Как задать относительный размер ImageView? - Программирование Android
Есть 9 ImageView, которые расположены в RelativeLayout При этом на экране в 4 дюйма они нужного размера, но на экране в 7 или 10 они...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru