2017-12-30 14 views
0

단추에 eventhandler를 추가하려고 할 때마다 null 참조 예외가 발생합니다. DialogFragment가있는 팝업 창을 만들려고합니다. PopUpWindow보기를 호출하는 곳입니다. 화면에 표시됩니다,하지만 난 ID로 버튼을 액세스 할 때 예를 들어 그들에게 eventhandlers을 할당 : Xamarin FindViewById NullReference 예외

Button btnCopyText = dp.view.FindViewById<Button>(Resource.Id.btnCopyText); 
    btnCopyText.Click += BtnCopyText_Click; 

그때 나는 누군가가 나를 도울 수, null 참조 예외가 아래에 필요한 코드입니다.

class dialog_Popup:DialogFragment 
{ 
    public View view; 
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     base.OnCreateView(inflater, container, savedInstanceState); 
     view = inflater.Inflate(Resource.Layout.PopupWindow, container, false); 

     return view; 
    } 
    public override void OnActivityCreated(Bundle savedInstanceState) 
    { 
     Dialog.Window.RequestFeature(WindowFeatures.NoTitle); 
     base.OnActivityCreated(savedInstanceState); 

    } 

public class MainActivity : Activity 
{ 
    protected override void OnCreate(Bundle bundle) 
    { 
    //some code 
    } 
    public string itemclicked; 
    dialog_Popup dp; 


    private void Lv_ItemLongClick(object sender, AdapterView.ItemLongClickEventArgs e) 
    { 
     //View popUpView = LayoutInflater.Inflate(Resource.Layout.PopupWindow, 
     //null); // inflating popup layout 

     Button height = FindViewById<Button>(Resource.Id.btnCopyText); 
     //Then: change the width of the button 
     FragmentTransaction transaction = FragmentManager.BeginTransaction(); 
     dp = new dialog_Popup(); 
     dp.Show(transaction,"Popup"); 

     itemclicked = lv.GetItemAtPosition(e.Position).ToString(); 

     Button btnCopyText = dp.view.FindViewById<Button>(Resource.Id.btnCopyText); 
     btnCopyText.Click += BtnCopyText_Click; 
     Button btnSaveCurrentAya = dp.view.FindViewById<Button>(Resource.Id.btnSaveCurrentAya); 
     btnSaveCurrentAya.Click += BtnSaveCurrentAya_Click; 
     Button btnsavingsAya = dp.view.FindViewById<Button>(Resource.Id.savingsAya); 
     btnsavingsAya.Click += BtnsavingsAya_Click;* 

     Button btnShareFB = dp.view.FindViewById<Button>(Resource.Id.fbShare); 
     btnShareFB.Click += BtnShareFB_Click; 
    } 

은}

NullReferenceException이이 findViewById를 발생할 수있는 몇 가지 이유가 있습니다
+0

dialog_Popup에 id가 btnCopyText 인 버튼이 있습니까? – Taier

+0

예, dialog_Popup이 호출하는보기에는 해당 ID가있는 단추가 있습니다. –

답변

0

:

  • 배치는 ID를 포함하지 않는 -> 올바른 레이아웃과 ID가 팽창되어 있는지 확인이/참조
  • Button과 같은 유형이 잘못되었습니다.

당신의 경우, dp와 dp.view가 null이 아닌지 확인하십시오.

여기서 언급해야 할 점은 기본보기에서 조각 제어를 참조하는 것이 가장 좋은 구현이 아니라는 것입니다. 단편은 자신 만의 삶을 살아갈 수 있어야합니다. 따라서 원하는 동작을 구현하는 두 가지 방법이 있습니다.

1) 조각이 이벤트를 가져오고 그 소리를 듣습니다. 즉, 기본보기에 무언가를 저장하는 논리가 포함됩니다.

2) 논리가 조각으로 이동합니다.

관련 문제