android中给按钮注册监听器的一种新颖的方法

不知道android:onclick这个属性大家熟悉么,我是看apidemos里边的一个例子 popupmenu发现它的

首先给大家看看代码

/*
 * Copyright (C) 2010 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.example.android.apis.view;

import android.app.Activity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.PopupMenu;
import android.widget.Toast;

import com.example.android.apis.R;

/**
 * This demonstrates the use of the PopupMenu class. Clicking the button will
 * inflate and show a popup menu from an XML resource.
 */
public class PopupMenu1 extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.popup_menu_1);
    }

    public void onPopupButtonClick(View button) {
        PopupMenu popup = new PopupMenu(this, button);
        popup.getMenuInflater().inflate(R.menu.popup, popup.getMenu());

        popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            public boolean onMenuItemClick(MenuItem item) {
                Toast.makeText(PopupMenu1.this,
                        "Clicked popup menu item " + item.getTitle(),
                        Toast.LENGTH_SHORT).show();
                return true;
            }
        });

        popup.show();
    }
}

大家有有木有发现 public void onPopupButtonClick(View button) 这个方法没有被调用过呢??其实这就是我要讲的地方,接下来我给大家看的是这个activity对应的layout文件


<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2010 Google Inc.

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical">
    <Button android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:onClick="onPopupButtonClick"
            android:text="@string/popup_menu_button" />
</LinearLayout>

有看到 Button这个view的android:onClick属性么??哈哈,秘密就在这里,这个例子的作者并没有采用常规的,setOnclicklistener()的方法来设置监听器。大家明白了么?以后看别人的代码如果发现按钮没有注册监听器,那么奥妙很可能就在它的xml文件里。。。

你可能感兴趣的:(android中给按钮注册监听器的一种新颖的方法)