2016-10-06 11 views
0

NavigationViewメニューがあります。 メニュー項目を長押しすると、ユーザーにさまざまなオプションやボタンを与えるポップアップが表示されます。各ボタンにはイベントハンドラがあります。Androidポップアップ - イベントハンドラへの引数の受け渡し

どのメニューアイテムが最初にポップアップをトリガしたかを知るには、これらのハンドラが必要です。

私が忘れているのは、オブジェクトの流れに沿ってそのアイデンティティを渡す方法の知識です。

投稿されたコードでは、menuitemはlongclickedです。ポップアップコンストラクタのビューとしてmenutemを渡します。 それをポップアップボタンのイベントハンドラにどのように渡すかわかりません。

私は代わりに、longpressが発生したときにidを変数に設定し、最後のハンドラでその変数をもう一度読むことを検討しています....しかし、これはチートのように感じ、管理する必要がありますイベントとの同期を確保する。私はあなたの質問を得た場合

@Override 
    public boolean onLongClick(View v) { 
     pop(v); 
     return true; 
    } 


public void pop(View v){ 

LayoutInflater layoutInflater = 
    (LayoutInflater)getBaseContext() 
    .getSystemService(LAYOUT_INFLATER_SERVICE); 

View popupView = layoutInflater.inflate(R.layout.popup, null); 

final PopupWindow popupWindow = new PopupWindow(
    popupView, 
    LayoutParams.WRAP_CONTENT, 
    LayoutParams.WRAP_CONTENT); 

    Button btnDismiss = (Button)popupView.findViewById(R.id.dismiss); 

    btnDismiss.setOnClickListener(new Button.OnClickListener(){ 
     @Override 
     public void onClick(View vw) { 
      Toast.makeText(getApplicationContext(), "id of menuitem here", Toast.LENGTH_SHORT).show(); 
      popupWindow.dismiss(); 
     } 
    }); 

popupWindow.showAsDropDown(v, 50, -30); 
} 

答えて

0

は右、あなただけのメニュー項目は、popメソッドへのタップのIDを渡し、後でトーストにその値を表示したいです。その場合 あなたは文字列にid値をキャストすることができます考慮すると、あなたはsetTag()getTag()を使用することができます。

@Override 
public boolean onLongClick(View v) 
{ 
    v.setTag(place the id of menuitem tapped here); 
     pop(v); 
     return true; 
} 


public void pop(View v) 
{ 

LayoutInflater layoutInflater = 
    (LayoutInflater)getBaseContext() 
    .getSystemService(LAYOUT_INFLATER_SERVICE); 

View popupView = layoutInflater.inflate(R.layout.popup, null); 

final PopupWindow popupWindow = new PopupWindow(
    popupView, 
    LayoutParams.WRAP_CONTENT, 
    LayoutParams.WRAP_CONTENT); 

    Button btnDismiss = (Button)popupView.findViewById(R.id.dismiss); 

    btnDismiss.setOnClickListener(new Button.OnClickListener(){ 
     @Override 
     public void onClick(View vw) { 
      Toast.makeText(getApplicationContext(), String.valueOf(v.getTag()), Toast.LENGTH_SHORT).show(); 
      popupWindow.dismiss(); 
     } 
    }); 

popupWindow.showAsDropDown(v, 50, -30); 
} 
+0

残念ながら、私は完全を期すためしようとしたものの、動作しないこと。 onlongpressに渡すビューは実際にはメニュー項目です。しかし、ボタンイベントに渡されるビューはボタン自体です。 – Esby

関連する問題