2016-04-26 11 views
1

私はaxmlファイルのボタンを持っていて、それはフラグメントから呼び出されました。私はどのようにボタンを使用することができますか?例えば、 "cobaButton"というidのボタンからonclickコマンドを受けたいとします。私はAndroidアプリを開発するためにVisual Studio 2015とXamarinを使用しています。フラグメント上のアクセスボタンビジュアルスタジオxamarin

これはこれは

public class PlanetFragment : DialogFragment 
{ 
    public static string ArgPlanetNumber = "planet_number"; 
    ConnectDB db = new ConnectDB(); 


    public override View OnCreateView(LayoutInflater p0, ViewGroup p1, Bundle p2) 
    { 

     var i = Arguments.GetInt(ArgPlanetNumber); 
     if (i == 0) 
     { 
      var rootView = p0.Inflate(Resource.Layout.HomePermainan, p1, false); 
      return rootView; 

     } 
     else 
     { 
      var rootView = p0.Inflate(Resource.Layout.MyProfile, p1, false); 
      return rootView; 
     } 
    } 
} 

私のフラグメント・ファイルであり、これは私のAXMLファイルです

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:minWidth="25px" 
android:minHeight="25px"> 
<LinearLayout 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/linearLayout1"> 
    <Button 
     android:text="Button" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:id="@+id/cobaButton" /> 
    <Button 
     android:text="Button" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:id="@+id/button2" /> 
    <Button 
     android:text="Button" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:id="@+id/button3" /> 
</LinearLayout> 
<Button 
    android:text="Button" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/button4" /> 

答えて

0

あなたはへの参照を取得することができます

public class MenuUtama : Activity 
{ 
    private DrawerLayout _drawer; 
    private MyActionBarDrawerToggle _drawerToggle; 
    private ListView _drawerList; 

    private string _drawerTitle; 
    private string _title; 
    private string[] _planetTitles; 


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

     // Create your application here 
     SetContentView(Resource.Layout.MenuUtama); 



      _title = _drawerTitle = Title; 
     _planetTitles = Resources.GetStringArray(Resource.Array.PlanetsArray); 
     _drawer = FindViewById<DrawerLayout>(Resource.Id.drawer_layout); 
     _drawerList = FindViewById<ListView>(Resource.Id.left_drawer); 

     _drawer.SetDrawerShadow(Resource.Drawable.drawer_shadow_dark, (int)GravityFlags.Start); 

     _drawerList.Adapter = new ArrayAdapter<string>(this, 
      Resource.Layout.DrawerListItem, _planetTitles); 
     _drawerList.ItemClick += (sender, args) => SelectItem(args.Position); 


     ActionBar.SetDisplayHomeAsUpEnabled(true); 
     ActionBar.SetHomeButtonEnabled(true); 

     //DrawerToggle is the animation that happens with the indicator next to the 
     //ActionBar icon. You can choose not to use this. 
     _drawerToggle = new MyActionBarDrawerToggle(this, _drawer, 
                Resource.Drawable.ic_drawer, 
                Resource.String.DrawerOpen, 
                Resource.String.DrawerClose); 

     //You can alternatively use _drawer.DrawerClosed here 
     _drawerToggle.DrawerClosed += delegate 
     { 
      ActionBar.Title = _title; 
      InvalidateOptionsMenu(); 
     }; 

     //You can alternatively use _drawer.DrawerOpened here 
     _drawerToggle.DrawerOpened += delegate 
     { 
      ActionBar.Title = _drawerTitle; 
      InvalidateOptionsMenu(); 
     }; 

     _drawer.SetDrawerListener(_drawerToggle); 

     if (null == savedInstanceState) 
      SelectItem(0); 
    } 

    private void SelectItem(int position) 
    { 
     var fragment = new PlanetFragment(); 
     var arguments = new Bundle(); 
     arguments.PutInt(PlanetFragment.ArgPlanetNumber, position); 
     fragment.Arguments = arguments; 

     FragmentManager.BeginTransaction() 
      .Replace(Resource.Id.content_frame, fragment) 
      .Commit(); 

     _drawerList.SetItemChecked(position, true); 
     ActionBar.Title = _title = _planetTitles[position]; 
     _drawer.CloseDrawer(_drawerList); 
    } 

    protected override void OnPostCreate(Bundle savedInstanceState) 
    { 
     base.OnPostCreate(savedInstanceState); 
     _drawerToggle.SyncState(); 
    } 

    public override void OnConfigurationChanged(Configuration newConfig) 
    { 
     base.OnConfigurationChanged(newConfig); 
     _drawerToggle.OnConfigurationChanged(newConfig); 
    } 

    public override bool OnCreateOptionsMenu(IMenu menu) 
    { 
     MenuInflater.Inflate(Resource.Menu.main, menu); 
     return base.OnCreateOptionsMenu(menu); 
    } 

    public override bool OnPrepareOptionsMenu(IMenu menu) 
    { 
     var drawerOpen = _drawer.IsDrawerOpen(Resource.Id.left_drawer); 
     menu.FindItem(Resource.Id.action_websearch).SetVisible(!drawerOpen); 
     return base.OnPrepareOptionsMenu(menu); 
    } 

    public override bool OnOptionsItemSelected(IMenuItem item) 
    { 
     if (_drawerToggle.OnOptionsItemSelected(item)) 
      return true; 

     switch (item.ItemId) 
     { 
      case Resource.Id.action_websearch: 
       { 
        var intent = new Intent(Intent.ActionWebSearch); 
        intent.PutExtra(SearchManager.Query, ActionBar.Title); 

        if ((intent.ResolveActivity(PackageManager)) != null) 
         StartActivity(intent); 
        else 
         Toast.MakeText(this, Resource.String.app_not_available, ToastLength.Long).Show(); 
        return true; 
       } 
      case Resource.Id.action_slidingpane: 
       { 
        var intent = new Intent(this, typeof(SlidingPaneLayoutActivity)); 
        intent.AddFlags(ActivityFlags.ClearTop); 
        StartActivity(intent); 
        return true; 
       } 
      default: 
       return base.OnOptionsItemSelected(item); 
     } 
    } 

} 

私の活動ですこのようなあなたのfragmentレイアウトで:

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    var view = inflater.Inflate(Resource.Layout.Example_Fragment, container, false); 
    var button = view.FindViewById<Button>(Resource.Id.cobaButton); 
} 
+0

を合計し、一般的な方法でそれがフラグメントで動作しませんが、私は何かを逃したのですか? – neneo

+0

は誤った形になっていますが、現在は動作しています。ありがとうございます:D – neneo

1

アンドロイドでは、そのIDでビューを取得するためにFindViewByIdを使用することができます。それは視界から独立しているので、この要素のためにviewtreeを通して検索します。だからrootView.FindViewById(id)であなたはボタンを手に入れます。

だから、これは

まで
public override View OnCreateView(LayoutInflater p0, ViewGroup p1, Bundle p2) 
{ 
    var i = Arguments.GetInt(ArgPlanetNumber); 
    if (i == 0) 
    { 
     var rootView = p0.Inflate(Resource.Layout.HomePermainan, p1, false); 
     // I just assume the button is in HomePermainan 
     var button = rootView.FindViewById<Button>(Resource.Id.cobaButton); 
     // Do whatever you want with this button like 
     button.Click += (sender, args) => { Console.Write("Button clicked"); }; 
     return rootView; 
    } 
    else 
    { 
     return p0.Inflate(Resource.Layout.MyProfile, p1, false); 
    } 
} 
+0

は既にそのコードを使用していますが、フラグメントでは機能しません。 – neneo

+0

は誤った形式になりました。 – neneo

関連する問題