Android - 多个OnClickListener?

11

我有4张图片,我们应该能够点击这些图片。 我想知道是否必须创建4个 OnClickListener ,或者是否有其他正确的方法可以实现?

public class NavigateActivity extends Activity  implements OnClickListener {

    // images
    private ImageView phone;
    private ImageView bookings;
    private ImageView settings;
    private ImageView pictures;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.navigate);
        phone = (ImageView) findViewById(R.navigate.callcenter);
        phone.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                if (v == phone) {
                    AlertDialog alertDialog = new AlertDialog.Builder(NavigateActivity.this).create();
                    alertDialog.setTitle("Attention");
                    alertDialog.setMessage("Etes-vous sur de vouloir appeler le Call center");

                    alertDialog.setButton("Oui", new DialogInterface.OnClickListener() {
                       public void onClick(DialogInterface dialog, int which) {
                          Intent callIntent = new Intent(Intent.ACTION_CALL);
                            callIntent.setData(Uri.parse("tel:1232456789"));
                            startActivity(callIntent);
                       }
                    });

                    alertDialog.setButton2("Non", new DialogInterface.OnClickListener() {
                           public void onClick(DialogInterface dialog, int which) {
                               dialog.cancel();  
                           }
                        });
                    alertDialog.show();
                }
            }
        });
 }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

    }
}
5个回答

16

你可以像这样做:

phone.setOnClickListener(this);
bookings.setOnClickListener(this);
settings.setOnClickListener(this);
pictures.setOnClickListener(this);

在 onClick() 方法中,

 @Override
    public void onClick(View v) {

       if(v == phone){
              // your stuff
        }
       else if(v == bookings){
              // your stuff
        }
       else if(v == settings){
              // your stuff
        }
       ese if(v == pictures){
              // your stuff
        }
    }

好的,我明白了。 谢谢你的例子! - nick

6
您可以重用您的监听器:
DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
                           public void onClick(DialogInterface dialog, int which) {
                               /*...*/
                           }
                        });

phone.setOnClickListener(listener);
bookings.setOnClickListener(listener);
/*...*/

请注意,如果您想使用 NavigateActivity.onClick() 方法,则应该简单地使用 phone.setOnClickListener(this); - Caner

5
您可以用以下方式使用/创建您的监听器:-
img1.setOnClickListener(imgClk);
img2.setOnClickListener(imgClk);
img3.setOnClickListener(imgClk);
img4.setOnClickListener(imgClk);

然后在onCreate()之后/外部创建OnClickListener。

    public OnClickListener imgClk = new OnClickListener() 
        {
            @Override
            public void onClick(View v) 
            {
              switch(v.getId()){
                case R.id.img1:
                 //write your code here
                  break;

               case R.id.img2:
                 //write your code here
                  break;

               case R.id.img3:
                 //write your code here
                  break;

               case R.id.img4:
                 //write your code here
                  break;
           }
       };

我希望这可以帮助您。


1

要使任何视图监听我们的操作,您必须将侦听器附加到该视图。因此,您需要附加四个侦听器。附加OnclickListener和编写实现是两件不同的事情。


1
我建议使用android:onClick来编写更易读的代码。
示例:
<Button
    android:id="@+id/buttonId"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="buttonText" 
    android:onClick="onClick"/>

然后在您的活动类中添加onClick方法。

public void onClick(View v) {
      switch(v.getId()){
           case R.id.myButton:
                   //Your logic goes here...
                   break;

           default:
                   break;
      }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接