Onclick для изображения, созданного в Java, а не XML - PullRequest
2 голосов
/ 10 января 2012

Вопрос Я создал несколько ImageViews по коду в Android в классе onCreate(). Класс реализует view.onclick () ..
ImageView не регистрирует, что он был нажат.Вот в чем проблема, если я вместо этого использую setTag(1), как я могу использовать тег в onClick()?:

a1 = new ImageView(this);
a1.setImageResource(R.drawable.examplepicture);
a1.setId(1);


public void onClick(View v) {   

    switch (v.getId()) {

    case (1):
        Toast.makeText(ScrollView1.this, "id200", Toast.LENGTH_LONG).show();
        break;
    }
}`

Ответы [ 2 ]

3 голосов
/ 10 января 2012

Вам нужно что-то вроде этого

a1.setOnClickListener(new View.OnClickListener({
    public void onClick(View v) {   

        switch (v.getId()) {

        case (1):
            Toast.makeText(ScrollView1.this, "id200", Toast.LENGTH_LONG).show();
            break;
        }
     }
}));

Обновление из комментария

Вы должны сохранить все ваши представления изображений в списке (или массиве), реализовать onClickListener (а не использовать его как анонимный внутренний класс) и добавить их в цикл for, что-то вроде этого.

class MyOnClickListener implements View.OnClickListener{

    public void onClick(View v) {   

        // do something with your View v for example ((ImageView)v.setImageBitmap(yourImage)
        switch (v.getId()) {

        case (1):
            Toast.makeText(ScrollView1.this, "id200", Toast.LENGTH_LONG).show();
            break;
        }
     } 
 }

MyOnClickListener listener = new MyOnClickListener();

// cycle through adding listener to yuor view
for(ImageView view : imageViews) {
    view.setOnClickListener(listener)
}

Если вы хотите выполнить определенную функцию в представлении, вы получаете его в качестве аргумента и можете выполнять с ним любую операцию.

// do something with your View v passed as onClick param, for example ((ImageView)v.setImageBitmap(yourImage)

Обновление из комментария.

Код, предложенный asker:

ArrayList<ImageView> imageViews = new ArrayList<ImageView>();  
imageViews.add(IM1); // add others ... 
for(ImageView imgView : imageViews){ 
    IM1.setOnClickListener(this); 
} 
public void onClick(View v){ 
    if((ImageView)v == IM1) { // do something } 
} 

Это должно сработать, но вы хотите определить OnClickListener как отдельный класс (вероятно, внутренний класс). Ваши ImageViews должны быть определены и настроены в отдельный класс (возможно, в упражнении), а затем вы должны добавить свой OnClickListener, вызвав setOnClickListener из упражнения (как описано в моем ответе выше). То, что вы делаете, это смешиваете слушателя и объекты, которые он слушает, которые не очень объектно ориентированы и, как правило, довольно плохая практика.

0 голосов
/ 10 января 2012

Если ваша деятельность реализует OnClickListener, вы сможете это сделать.

a1 = new ImageView(this); 
a1.setImageResource(R.drawable.examplepicture); 
a1.setOnClickListener( this );

Тем не менее, я бы лично избегал реализации этого действия OnClickListener. Вместо этого я бы сделал это.

private OnClickListener a1Listener = new OnClickListener() {
    public void onClick(View v) {
      // do something when the button is clicked
    }
};

protected void onCreate(Bundle savedValues) {
    a1 = new ImageView(this); 
    a1.setImageResource(R.drawable.examplepicture); 
    a1.setOnClickListener( a1Listener );
}
...