2016-10-06 3 views
0

메뉴가있는 NavigationView가 있습니다. 메뉴 항목을 길게 누르면, 다양한 옵션/버튼을 제공하는 팝업이 나타납니다. 각 버튼에는 이벤트 핸들러가 있습니다.Android 팝업 - 이벤트 처리기에 인수 전달

어떤 메뉴 항목이 원래 팝업을 시작했는지 알기 위해 이러한 핸들러가 필요합니다.

내가 누락 된 것은 개체 흐름에 따라 해당 ID를 전달하는 방법에 대한 지식입니다.

게시 된 코드에서 menuitem은 longclicked이고 팝업 생성자에 menutem을 뷰로 전달합니다. 그러나 팝업 Button의 이벤트 처리기로 전달하는 방법을 모릅니다.

나는 길가잡이가 발생할 때 단순히 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

바로, 당신은 메뉴 항목이 팝업 방식에 탭의 ID를 전달하고 나중에 토스트에 그 값을 표시합니다. 난 그냥 완성도를 위해 노력하지만,

@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

불행하게도이 작동하지 않습니다 : 당신은 문자열로 id 값을 캐스팅 할 생각이 경우 , 당신은 setTag()getTag()가 사용할 수 있습니다. onlongpress로 전달되는보기는 참으로 메뉴 항목입니다. 그러나 버튼 이벤트로 전달되는보기는 버튼 자체입니다. – Esby

관련 문제