1

Так что моя проблема в том, что кнопки, содержащиеся в моих фрагментах, вызывают ошибку «Необработанное исключение - ссылка на объект, не установленная на экземпляр объекта» Я думал, потому что я ссылался на макет который содержит кнопку, которая не вызовет ошибку. Если кто-то может пролить свет на то, что я делаю неправильно, это было бы здорово. Я думаю, что я либо пропустил какой-то жизненно важный код, либо полностью испортил его, поскольку я новичок в использовании фрагментов и понимаю, что они работают иначе, чем в действиях.Кнопка не работает внутри Фрагмент

Это мой 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); 
    } 

} 

}

Это один из моих фрагментов (есть несколько, но все они содержат в основном один и тот же код до сих пор)

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); 
    } 


} 

}

ответ

0

Попробуйте переместить следующие строки на езды недействительным OnViewCreated или переопределения недействительным onActivityCreated

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

Спасибо большое лол !! – Rachel

0

Вы должны написать View с строчной view в заявлении ниже:

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

 Смежные вопросы

  • Нет связанных вопросов^_^