2017-11-12 12 views
0

複数ページのAndroidアプリをナビゲートする方法を理解しようとしています。クリックイベントの呼び出しエラー

私の最初のページのXAMLは次のようになります。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <Button 
     android:text="WELFARE" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/cmdWelfare" 
     android:onClick="cmdWelfareClicked" /> 
    <Button 
     android:text="SETTINGS" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/cmdSettings" 
     android:onClick="cmdSettingsClicked" /> 
</LinearLayout> 

次のように活動がある:

using Android.App; 
using Android.OS; 
using Android.Views; 

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

      // Set our view from the "main" layout resource 
      SetContentView (Resource.Layout.Main); 
     } 
     public void cmdWelfareClicked(View v) 
     { 
      SetContentView(Resource.Layout.p1); 
     } 
     public void cmdSettingsClicked(View v) 
     { 
      v.SetBackgroundColor(Android.Graphics.Color.Azure); 
     } 
    } 
} 

をしかし、ボタンは次のページを開くには、クリックされたときに、未知の例外がありますスローされる。

enter image description here

(コピー内容から)エラーテキストが、私はこれを行うと間違っている可能性が何見当がつかないする方法を学習しようとしているAn unhandled exception occured. occurred

なので、任意の助けいただければ幸いです。

+0

スタックトレースを投稿できますか? –

+0

私は大好きですが、私が得るのは上記のものです。スタックトレースを取得する方法は? – CompanyDroneFromSector7G

+0

Hmm。また、onCreateメソッドのボタンにイベントハンドラを割り当てて、それが問題を解決するかどうかを確認することをお勧めします。そのようにすることは、xmlでクリックして割り当てるよりもお勧めします。 –

答えて

1

このメソッドをエクスポートする必要があります。このようにしてみてください。

[Export("cmdWelfareClicked")] 
public void cmdWelfareClicked(View v) 
{ 
    SetContentView(Resource.Layout.p1); 
} 


[Export("cmdSettingsClicked")] 
public void cmdSettingsClicked(View v) 
{ 
    v.SetBackgroundColor(Android.Graphics.Color.Azure); 
} 

しかし、なぜあなたはcmdWelfareClicked内部SetContentView(Resource.Layout.p1);を行っている、あなたは異なるレイアウトを使用したい場合は、あなたがそれを行うための別の方法は、onClickattributeを取り除くことであろう別のActivity

を開始する必要がありますか? xmlButtonから、あなたOnCreate

でIDを使用するように:

protected override void OnCreate(Bundle bundle) 
{ 
    base.OnCreate(bundle); 
    // Set our view from the "main" layout resource 
    SetContentView (Resource.Layout.Main); 

    Button buttonCmdWelfare = FindViewById<Button> (Resource.Id.cmdWelfare); 
    buttonCmdWelfare.Click += delegate { 
     //Clicked 
    }; 

    Button buttonCmdSettings = FindViewById<Button> (Resource.Id.cmdSettings); 
    buttonCmdSettings.Click += delegate { 
     //Clicked 
    }; 
} 

また、削除するのを忘れないでください。android:onClick="cmdSettingsClicked"android:onClick="cmdWelfareClicked"

+0

よろしくお願いいたします。それでは、どうやって別の活動を始めるのですか? (私はこれで初めてです) – CompanyDroneFromSector7G

+0

あなたのアップデートを元に戻しました。問題は複数ページのアプリケーションで、ページを再度開いたときにアクティビティが再び呼び出され、再度クリックイベントが割り当てられてエラーが発生するということです。 – CompanyDroneFromSector7G

+0

@ CompanyDroneFromSector7G新しい活動を開始するには[こちら](https://developer.xamarin.com/recipes/android/fundamentals/activity/start_an_activity/)をご覧ください。あなたはエラーを投稿できますか? OnCreateは、OnDestroyが呼び出されたときにのみ呼び出されるため、リスナーを再割り当てする必要があるため、エラーは発生しません。あなたがしてはならないクリックイベントで 'SetContentView(Resource.Layout.p1);'を実行していることが原因であると思います。 –

関連する問題