这个问题与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()指定布局
答案 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。