Android:在android中指定完整的方法路径:onClick

时间:2016-11-07 16:09:40

标签: android android-studio

这个问题与Android开发有关。通常,如何将布局XML文件绑定到某个Activity java文件?这与诸如指定了android:onClick属性的按钮的情况相关。假设您有一个布局XML文件,其中包含如下按钮:

$('.cd-btn').on('click', function(event){
    event.preventDefault();
    $('.cd-panel').toggleClass('is-visible');
    // added below 3 lines
    if($('.cd-panel-a').hasClass('is-visible')) {
      $('.cd-panel-a').removeClass('is-visible');
    }
});

$('.cd-btn-a').on('click', function(event){
    event.preventDefault();
    $('.cd-panel-a').toggleClass('is-visible');
    // added below 3 lines
    if($('.cd-panel').hasClass('is-visible')) {
       $('.cd-panel').removeClass('is-visible');
    }
});

因此,单击此按钮时,将调用<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button_send" android:onClick="sendMessage" /> 方法。如果多个Activity有sendMessage(View view)方法,那么Android如何决定调用哪个?几乎没有任何关系布局文件与活动文件。在Android Studio中,如果有多个选项,我发现sendMessage(View view)默认为主要活动的android:onClick="sendMessage"方法。我还发现Android Studio不允许您只指定完整的方法路径(例如,sendMessage)。我错过了什么吗?

编辑:我想补充一点,Android Studio显示sendMessage默认为特定活动,REGARDLESS哪些活动已通过setContentView()指定布局

3 个答案:

答案 0 :(得分:1)

angular.module('app',['ngMaterial']) .controller('MyController', function($scope, $mdDialog) { this.open = function(ev) { this.showText = false; $mdDialog.show( { templateUrl: "test.html", clickOutsideToClose: true, scope: $scope, preserveScope: true, controller: function($scope) { }, }); }; this.save = function () { this.showText = true; $mdDialog.cancel(); } }) 将调用android:onClick上的方法,您的布局会膨胀并附加到。布局与其控制器之间不应存在紧密耦合,这就是为什么您无法指定&#34;完整路径&#34;。

我建议使用编程Activity代替xml属性。它为您提供了更大的控制力。

答案 1 :(得分:1)

您可以使用tools:context属性告诉Android Studio在何种上下文中使用布局。你在那里指定一个类,然后它应该采用这个类来找到正确的方法

但是这个属性仅适用于IDE。在运行时期间,它绑定到夸大布局的活动方法。

答案 2 :(得分:0)

当然它会从该视图的activity类中调用该方法。因此,如果该视图来自主活动,并且视图来自(例如Activity2),那么它将从主活动类调用它,然后它将在Activity2中查找sendMessage方法。如果它无法在Activity2类中找到sendMessage方法,那么它将抛出NullpointerException。