目 录CONTENT

文章目录

Android开发日常---封装Click方法

geekland
2025-05-26 / 1 评论 / 0 点赞 / 45 阅读 / 0 字 / 正在检测是否收录...

前言

最近在写一个Demo,需要在首页上添加多个按钮,每个按钮点击后跳转到其他的Activity,写一下思路和总结。

页面布局

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="这是一个综合案例APP"
        android:gravity="center"
        android:layout_marginTop="10dp"
        android:textSize="15sp"
        android:textColor="@color/black">
    </TextView>
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
        <GridLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:rowCount="4"
            android:columnCount="4"
           
            >
            <Button
                android:id="@+id/one"
                android:layout_width="0dp"
                android:text="按钮"
                android:layout_margin="10dp"
                android:layout_columnWeight="1"
                 android:onClick="showtoast"
                >
            </Button>
            <Button
                android:id="@+id/two"
                android:layout_width="0dp"
                android:text="按钮"
                android:layout_margin="10dp"
                android:layout_columnWeight="1"
                >
            </Button>
            <Button
                android:id="@+id/three"
                android:layout_width="0dp"
                android:text="按钮"
                android:layout_margin="10dp"
                android:layout_columnWeight="1"
                >
            </Button>
        </GridLayout>
    </ScrollView>
</LinearLayout>

页面分析:

  • 最外层的LinearLayout包裹,纵向排列,里面有TextView和ScrollView

  • TextView宽度撑满,高度自适应内容高度,距离顶部10dp,字体大小15sp,gravity文字相对于布局居中(字体相对于TextView)

  • GridLayout宽度撑满,高度撑满,声明rowCount和columnCount为4,也就是4行4列,GridLayout 的布局机制是先填充列,再换行

  • Button宽度0dp,高度自适应,layout_columnWeight设置平分行宽度,一定要设置layout_width="0dp",否则Weight权重失效

页面效果:

基础点击事件逻辑

通过Id方式增加Click方法

通过button上的android:onClick="showtoast",给button添加点击方法,这是基础的方式;

public void showtoast (View view){
    Toast.makeText(MainActivity.this, "按钮被点击了", Toast.LENGTH_SHORT).show();
    }

但是这种方最简单便捷,但是不好维护使用,定义的方法不知道对应的哪个点击,实际开发中不建议使用‘

通过Java注册事件监听器

通过button上的Id,给按钮添加点击事件监听。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn1 = findViewById(R.id.one);
        btn1.setOnClickListener(new MyOnClickListener());

    }

    private class MyOnClickListener implements View.OnClickListener {
        @Override
        public void onClick(View view) {
            Toast.makeText(MainActivity.this, "按钮被点击了", Toast.LENGTH_SHORT).show();
        }
    }
}

分析代码:

  • findViewById获取按钮

  • 给按钮添加一个事件监听,setOnClickListener,这里使用的是声明类MyOnClickListener,这个类实现了接口View.OnClickListener

  • MyOnClickListener重写onClick方法

封装

匿名类

如果一个页面有多个按钮,点击的事件逻辑也基本相同,每次都需要写重复代码,这显然不合适,可以把点击的事件逻辑逻辑抽离处理封装成一个类,通过方法名执行不同的逻辑处理,上面使用的是声明类,也可以使用匿名类的方式简化代码

NavigationUtils.java

public class NavigationUtils {
    /**
     * Toast
     * @param context 当前上下文
     */
    public static void showtoast(Context context) {
        Toast.makeText(context, "按钮被点击了", Toast.LENGTH_SHORT).show();
    }
    /**
     * 跳转到目标 Activity
     * @param context 当前上下文
     * @param targetActivityClass 目标 Activity 的 Class
     */
    public static void navigateTo(Context context,Class<?> targetActivityClass) {
        Intent intent = new Intent(context, targetActivityClass);
        context.startActivity(intent);
    }

    /**
     * 带参数的跳转
     * @param context 当前上下文
     * @param targetActivityClass 目标 Activity
     * @param extras 传递的 Bundle 数据
     */
    public static void navigateWithExtras(Context context, Class<?> targetActivityClass, Bundle extras) {
        Intent intent = new Intent(context, targetActivityClass);
        intent.putExtras(extras);
        context.startActivity(intent);
    }
}

MainActivity.java

        Button btn1 = findViewById(R.id.one);
//        匿名类
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                NavigationUtils.showtoast(MainActivity.this);
            }
        });

Lambda 表达式写法

Button btn1 = findViewById(R.id.one);
btn1.setOnClickListener(v -> NavigationUtils.showtoast(MainActivity.this));

在 Android 开发中,Lambda 表达式可以大幅简化 setOnClickListener 的代码,使代码更简洁易读。

0

评论区