1

Also mein Problem ist, dass die Tasten, die in meinen Fragmenten enthalten sind, einen Fehler "Unhandled Exception - Objektreferenz nicht auf eine Instanz eines Objekts gesetzt" Ich dachte, weil ich das Layout referenziert hatte das enthält die Schaltfläche, dass dies keinen Fehler verursachen würde. Wenn jemand etwas beleuchten könnte, was ich falsch mache, wäre das großartig. Ich denke, dass ich entweder einen Vitalcode vermisse oder es völlig vermasselt habe, da ich neu bin, Fragmente zu verwenden und zu verstehen, dass sie anders als Aktivitäten funktionieren.Button funktioniert nicht in Fragment

Das ist mein MainActivity:

public class MainActivity : ActionBarActivity 
{ 
    private SupportToolbar mToolbar; 
    private MyActionBarDrawerToggle mDrawerToggle; 

    private DrawerLayout mDrawerLayout; 
    private ListView mLeftDrawer; 

    private HomeFragment mHomeFragment; 
    private LogInFragment mLogInFragment; 
    private MatchCentreFragment mMatchCentreFragment; 
    private PrevCompFragment mPrevCompFragment; 
    private PrevFixFragment mPrevFixFragment; 
    private SettingsFragment mSettingsFragment; 
    private SocialFragment mSocialFragment; 
    private UpcomCompFragment mUpcomCompFragment; 
    private UpcomFixFragment mUpcomFixFragment; 

    private SupportFragment mCurrentFragment = new SupportFragment(); 
    private Stack<SupportFragment> mStackFragments; 

    private ArrayAdapter mLeftAdapter; 

    private List<string> mLeftDataItems; 

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

     SetContentView(Resource.Layout.Main); 

     mToolbar = FindViewById<SupportToolbar>(Resource.Id.toolbar); 
     mDrawerLayout = FindViewById<DrawerLayout>(Resource.Id.drawer_layout); 
     mLeftDrawer = FindViewById<ListView>(Resource.Id.left_drawer); 

     mHomeFragment = new HomeFragment(); 
     mLogInFragment = new LogInFragment(); 
     mMatchCentreFragment = new MatchCentreFragment(); 
     mPrevCompFragment = new PrevCompFragment(); 
     mPrevFixFragment = new PrevFixFragment(); 
     mSettingsFragment = new SettingsFragment(); 
     mSocialFragment = new SocialFragment(); 
     mUpcomCompFragment = new UpcomCompFragment(); 
     mUpcomFixFragment = new UpcomFixFragment(); 

     mStackFragments = new Stack<SupportFragment>(); 

     mLeftDrawer.Tag = 0; 

     SetSupportActionBar(mToolbar); 


     mLeftDataItems = new List<string>(); 
     mLeftDataItems.Add("Home"); 
     mLeftDataItems.Add("Log In"); 
     mLeftDataItems.Add("Match Centre"); 
     mLeftDataItems.Add("Previous Fixtures"); 
     mLeftDataItems.Add("Upcoming Fixtures"); 
     mLeftDataItems.Add("Previous Competitions"); 
     mLeftDataItems.Add("Upcoming Competitions"); 
     mLeftDataItems.Add("Settings"); 
     mLeftDataItems.Add("Social"); 

     mLeftAdapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, mLeftDataItems); 
     mLeftDrawer.Adapter = mLeftAdapter; 
     mLeftDrawer.ItemClick += MenuListView_ItemClick; 

     mDrawerToggle = new MyActionBarDrawerToggle(this, mDrawerLayout, Resource.String.openDrawer, Resource.String.closeDrawer); 

     if (bundle != null) 
     { 
      if (bundle.GetString("DrawerState") == "Opened") 
      { 
       SupportActionBar.SetTitle(Resource.String.openDrawer); 
      } 
      else 
      { 
       SupportActionBar.SetTitle(Resource.String.closeDrawer); 
      } 
     } 
     else 
     { 
      SupportActionBar.SetTitle(Resource.String.closeDrawer); 
     } 

     Android.Support.V4.App.FragmentTransaction trans = SupportFragmentManager.BeginTransaction(); 

     trans.Add(Resource.Id.fragmentContainer, mHomeFragment); 
     trans.Add(Resource.Id.fragmentContainer, mLogInFragment); 
     trans.Hide(mLogInFragment); 
     trans.Add(Resource.Id.fragmentContainer, mMatchCentreFragment); 
     trans.Hide(mMatchCentreFragment); 
     trans.Add(Resource.Id.fragmentContainer, mPrevFixFragment); 
     trans.Hide(mPrevFixFragment); 
     trans.Add(Resource.Id.fragmentContainer, mUpcomFixFragment); 
     trans.Hide(mUpcomFixFragment); 
     trans.Add(Resource.Id.fragmentContainer, mPrevCompFragment); 
     trans.Hide(mPrevCompFragment); 
     trans.Add(Resource.Id.fragmentContainer, mUpcomCompFragment); 
     trans.Hide(mUpcomCompFragment); 
     trans.Add(Resource.Id.fragmentContainer, mSettingsFragment); 
     trans.Hide(mSettingsFragment); 
     trans.Add(Resource.Id.fragmentContainer, mSocialFragment); 
     trans.Hide(mSocialFragment); 



     mCurrentFragment = mHomeFragment; 
     trans.Commit(); 

    } 


    void MenuListView_ItemClick (object sender, AdapterView.ItemClickEventArgs e) 
    { 
     Android.Support.V4.App.Fragment fragment = null; 

     switch (e.Id) 
     { 
      case 0: 
       ShowFragment(mHomeFragment); 
       break; 
      case 1: 
       ShowFragment(mLogInFragment); 
       break; 
      case 2: 
       ShowFragment(mMatchCentreFragment); 
       break; 
      case 3: 
       ShowFragment(mPrevFixFragment); 
       break; 
      case 4: 
       ShowFragment(mUpcomFixFragment); 
       break; 
      case 5: 
       ShowFragment(mPrevCompFragment); 
       break; 
      case 6: 
       ShowFragment(mUpcomCompFragment); 
       break; 
      case 7: 
       ShowFragment(mSettingsFragment); 
       break; 
      case 8: 
       ShowFragment(mSocialFragment); 
       break; 
     } 

     mDrawerLayout.CloseDrawers(); 
     mDrawerToggle.SyncState(); 
    } 

    private void ShowFragment (SupportFragment fragment) 
    { 
     if (fragment.IsVisible) 
     { 
      return; 
     } 
     var trans = SupportFragmentManager.BeginTransaction(); 

     fragment.View.BringToFront(); 
     mCurrentFragment.View.BringToFront(); 

     trans.Hide(mCurrentFragment); 
     trans.Show(fragment); 

     trans.AddToBackStack(null); 
     mStackFragments.Push(mCurrentFragment); 
     trans.Commit(); 

     mCurrentFragment = fragment; 


    } 
    public override bool OnOptionsItemSelected(IMenuItem item) 
    { 
     switch (item.ItemId) 
     { 

      case Android.Resource.Id.Home: 
       //The hamburger icon was clicked which means the drawer toggle will handle the event 


       mDrawerToggle.OnOptionsItemSelected(item); 
       return true; 

      case Resource.Id.action_refresh: 
       //Refresh 
       return true; 

      case Resource.Id.action_help: 


       return true; 

      default: 
       return base.OnOptionsItemSelected(item); 
     } 
    } 

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

    protected override void OnSaveInstanceState(Bundle outState) 
    { 
     if(mDrawerLayout.IsDrawerOpen((int)GravityFlags.Left)) 
     { 
      outState.PutString("DrawerState", "Opened"); 
     } 
     else 
     { 
      outState.PutString("DrawerState", "Closed"); 
     } 

     base.OnSaveInstanceState(outState); 
    } 

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

    public override void OnConfigurationChanged(Android.Content.Res.Configuration newConfig) 
    { 
     base.OnConfigurationChanged(newConfig); 
     mDrawerToggle.OnConfigurationChanged(newConfig); 
    } 

} 

}

Dies ist einer meiner Fragmente (es gibt mehr, aber sie alle im Grunde den gleichen Code enthalten bisher)

public class PrevFixFragment : Android.Support.V4.App.Fragment 
{ 
    Button button; 


    public PrevFixFragment() 
    { 

    } 
    public static Android.Support.V4.App.Fragment newInstance(Context context) 
    { 
     PrevFixFragment fragment = new PrevFixFragment(); 
     return fragment; 
    } 
    public override void OnCreate(Bundle bundle) 
    { 


     base.OnCreate(bundle); 

    } 
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     View view = inflater.Inflate(Resource.Layout.PreviousFixtures, null); 

     button = View.FindViewById<Button>(Resource.Id.upcombutton); 
     button.Click += StartNewActivity; 

     return view; 

    } 

    void StartNewActivity(object sender, EventArgs e) 
    { 
     Intent intent = new Intent(Activity, typeof(UpcomFixActivity)); 
     StartActivity(intent); 
    } 


} 

}

Antwort

0

Versuchen Sie, die folgenden Zeilen nach zu verschieben Fahrt Leere OnViewCreated oder override void onActivityCreated

button = View.FindViewById<Button>(Resource.Id.upcombutton); 
    button.Click += StartNewActivity; 
+0

Thank you so viel lol !! – Rachel

0

Sie müssen View mit Klein view in Anweisung schreiben unter:

button = View.FindViewById<Button>(Resource.Id.upcombutton); 
Verwandte Themen