2017-12-30 55 views
0

イベントハンドラをボタンに追加しようとすると、null参照例外が発生するたびにDialogFragmentでポップアップウィンドウを作成しようとしていますが、そこにはPopUpWindowビューが呼び出されます画面に表示されますが、私はidで、ボタンにアクセスしようとすると、例えばそれらにのEventHandlerを割り当てるには: 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; 
    } 

}

+0

dialog_PopupにはidがbtnCopyTextのボタンがありますか? – Taier

+0

はい、dialog_Popupが呼び出すビューには、そのIDのボタンがあります –

答えて

0

とNullReferenceExceptionがFindViewByIdで発生する可能性があるいくつかの理由がある:

  • レイアウトはIDが含まれていない - >チェック正しいレイアウトとIDが膨張すること/参照
  • Buttonのようなタイプが正しくない

Inあなたのケースでは、dpとdp.viewがnullでないことを確認してください。

ここで言及しておきたいことは、メインビューのフラグメントのコントロールを参照するのが最良の実装ではないということです。断片は、自分で人生できるはずのものです。だから私はあなたの望む行動を実装する2つの方法を参照してください:

1)断片はイベントを取得し、それを聞く。これは、メインビューに何かを保存するロジックが含まれることを意味します。

2)ロジックがフラグメントに移動します。

関連する問題