代码之家  ›  专栏  ›  技术社区  ›  VSB

安卓布局:定义onClick在XML布局中,它引用了超级类中的方法

  •  2
  • VSB  · 技术社区  · 6 年前

    我的活动中有一个按钮叫做 LoginActivity BaseActivity . 在其布局文件中,我有以下声明:

        <ImageButton
            android:id="@+id/backPressed"
            style="@style/Widget.AppCompat.ActionButton"
            android:layout_width="?attr/actionBarSize"
            android:layout_height="?attr/actionBarSize"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:onClick="act"
            android:src="@drawable/ic_arrow_back" />
    

    生成过程提示以下错误:

    Corresponding method handler '`public void act(android.view.View)`' not found
    

    而它是在超级类中定义的。我想知道我该怎么说 BaseActivity.act(..) 内部布局 登陆界面 .

    BaseActivity.act() :

    fun act(view: View) {
            val context = view.context
            when (view.id) {
                R.id.backPressed-> //some stuff
            }
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   guipivoto SadeghAlavizadeh    6 年前

    最初,我看到了两个修复。此外,还有一些要点你必须考虑。

    public class BaseActivity extends Activity {
        public void act(View view) {
            // Implementation
        }
    }
    
    public class LoginActivity extends BaseActivity {
        @Override
        public void act(View view) {
            super.act(view);
        }
    }
    

    保持最终实施

    正如你提到的,你的方法是最终的。因此,如果要将实现单独保留在BaseActivity中,可以执行以下操作:

    public class BaseActivity extends Activity {
        public final void handleAct(View view) {
            // Implementation
        }
    }
    
    public class LoginActivity extends BaseActivity {
    
        @Override
        public void act(View view) {
            handleAct(view);
        }
    }
    

    您可以考虑的另一点是,基类应该实现所有子活动通用的方法。如果 act 只与 LoginActivity ,则不应在 BaseActivity 登陆界面 .. 否则,任何扩展的类 基本活性

    编辑 pankaj-kumar 评论。也许,你只需要加上 public 方法签名:

    public fun act(view: View) {
        ...
    }