【问题标题】:Several activities using same listener使用相同侦听器的多个活动
【发布时间】:2010-12-03 10:11:09
【问题描述】:

我得到了 4 个活动,它们都包含一个 xml-footer,其中包含 4 个按钮(每个活动一个)。 我现在想为这些按钮设置 onclicklisteners(它是页脚中的自制菜单)。

问题是,我如何使用侦听器以便我可以重用代码? 我有两个想法:

  1. 创建一个实现 onclicklistener 的类,在每个活动中我都会获得按钮,然后创建一个新的监听器类实例并执行 button.setOnClickListener(onClickListener) 问题是在侦听器类中,我将如何检查哪个按钮调用了事件? 我将如何创建一个开始活动的意图,通常我会这样做: Intent intent = new Intent(FromActivity.this, ToAcitivty.class) 但我没有对 FromActivity 的引用。

  2. 创建一个从活动扩展的基类,然后 4 个活动将从基类扩展。然后我想在基类中设置监听器。这里的问题是我无法通过这样做来获得对按钮的引用 按钮 button1 = (Button)findViewById(R.id.menu_button1); button1 将为空。我什至没有调用 setEventView,因为这应该在 Activity 中而不是在基类中完成。

有什么想法吗?

谢谢

【问题讨论】:

    标签: android listener base-class


    【解决方案1】:

    相同的代码在这里:

        public class MyClass extends Activity implements View.OnClickListener{
            btnA=(Button)findViewById(R.id.btnA);
            btnA.setOnClickListener(this);
            btnB=(Button)findViewById(R.id.btnB);
            btnB.setOnClickListener(this);
    
    
        }
        @Override
        public void onClick(View v)
        {
            Button clickedButton = (Button) v;
            switch (clickedButton.getId())
            {
                case R.id.btnA:
                    Intent regIntent = new Intent(Home.this,Registration.class);
                    startActivityIfNeeded(regIntent, 1);
                    break;
                case R.id.btnB:
                    //Some code
                    break;
            }
        }
    

    (编辑为原始的第一行在代码格式上被破坏了。

    【讨论】:

    • 谢谢您,这非常有效。如果我有一个只存在于一个活动上的按钮,我会检查它是否是这个按钮,否则我会做 super.onClick(view)。整洁。
    猜你喜欢
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 2014-12-02
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多