Xamarin中所有活动的标题点击事件的常见标题android

问题描述:

我正在开发一个xamarin android应用程序,在那里我用来调用所有活动中的标题活动。我的代码法洛斯Xamarin中所有活动的标题点击事件的常见标题android

我Main.axml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/container" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 

<!-- Header aligned to top --> 
<include layout="@layout/Header" 
     android:id="@+id/includeheader" 
     android:layout_alignParentTop="true" /> 

<!-- Content below header and above footer --> 
<include layout="@layout/Content" 
     android:id="@+id/includecontent" /> 

<!-- Footer aligned to bottom --> 
<include layout="@layout/Footer" 
     android:id="@+id/includefooter" 
     android:layout_alignParentBottom="true"/> 

</RelativeLayout> 

我Header.axml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:id="@+id/header" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<TableLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:minHeight="50dip"> 
<TableRow 
    android:background="#2c2c2c" 
    android:padding="10dip"> 
    <TextView 
     android:id="@+id/scanHome" 
     android:layout_width="0dip" 
     android:layout_weight="2.5" 
     android:textSize="22sp" 
     android:textStyle="bold" 
     android:gravity="center" 
     android:text="" /> 
    <Button 
     android:id="@+id/Settings" 
     android:layout_width="0dip" 
     android:layout_height="30dip" 
     android:layout_marginLeft="10dip" 
     android:layout_weight="0.17" 
     android:gravity="center" 
     android:width="35dip" 
     android:clickable="true" 
     android:onClick="SettingsClick"/> 
    <Button 
     android:id="@+id/logout" 
     android:layout_width="0dip" 
     android:layout_height="40dip" 
     android:layout_weight="0.27" 
     android:gravity="center" 
     android:width="40dip" /> 
</TableRow> 
</TableLayout> 

</LinearLayout> 

MainActivity.class

namespace LayoutApp 
{ 
[Activity(Label = "LayoutApp", MainLauncher = true, Icon = "@drawable/icon")] 
public class MainActivity : Header 
{ 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     // Set our view from the "main" layout resource 
     SetContentView(Resource.Layout.Main); 
     setHeading("Scan Home"); 
    } 
} 
} 

Header.class

[Activity(Label = "LayoutApp", MainLauncher = false)] 
public abstract class Header : Activity , View.IOnClickListener 
{ 
    private TextView HeaderText; 
    private Button Settings; 

    protected override void OnCreate(Bundle savedInstanceState) 
    { 
     base.OnCreate(savedInstanceState); 

     SetContentView(Resource.Layout.Header); 

     Settings = FindViewById<Button>(Resource.Id.Settings); 

     Settings.Click += delegate 
     { 

     }; 
    } 

    protected void setHeading(string text) 
    { 
     if (HeaderText == null) 
      HeaderText = FindViewById<TextView>(Resource.Id.scanHome); 
     if (HeaderText != null) 
      HeaderText.Text = text; 
    } 

    public void SettingsClick() 
    { 

    } 
} 

因此,我正在MainActivity中使用Header Activity,就像在使用include属性的本机android中一样。当我加载主启动器时,标题也显示,但点击事件不能从MainActivity工作,其中文本从setHeading方法应用。

调试时,错误显示为'java.lang.illegalistateexception:无法在viewclass的onclick处理程序的activity类中找到方法SettingsClick(View)“。

所以,我的问题在这里是我想获得标题的Click事件。请仔细研究一下我的问题,并帮助我解决问题。提前致谢。

布局文件(AXML)没有链接到与它们具有相同名称的活动。

在您的Main.axml代码中,您将包含(添加)来自Header.axml的布局代码;但是,MainActivity.cs代码与Main.axml没有关系,就像HeaderActivity.cs代码与Header.axml代码没有关系。

在MainActivity.cs代码中,SetContentView(Resource.Layout.Main)将Main.axml布局(包含Header.axml代码)应用于MainActivity,但不应用HeaderActivity.cs中的方法。

如果你想在你的应用程序与工具栏的应用程序和底酒吧,有一个很好的教程在这里:http://mateoj.com/2015/06/21/adding-toolbar-and-navigation-drawer-all-activities-android/

你也应该在Android碎片看看。

@kumar Sudheer,我不知道Xamarin的发展,但我可以通过查看代码和异常情况了解你想要做什么。

只需通过View对象作为参数在头活动

public void SettingsClick(View v) 
{ 

} 

Android中的SettingClick方法,当你在布局文件中定义的点击处理那么该方法的签名会public void <clickHandler>(View v) {}

你没有通过的,这就是为什么系统无法找到你的活动方法,这就是为什么你所得到的java.lang.IllegaliStateException

的方法 View参数