2013-05-09 6 views
0

내 앱에는 클릭하면 컨텍스트 메뉴가 표시되는 버튼이 있습니다. 첫 번째 항목을 클릭하면 datepicker 대화 상자 조각이 열립니다.Android 컨텍스트 메뉴에서 NoSuchMethodException

Android 2.3에서 작동하지만 Android 4.0에 NoSuchMethoodExcepton이 표시됩니다.

여기 내 코드입니다 :

@Override 
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    getMenuInflater().inflate(R.menu.actions , menu); 
    } 

    @Override 
    public boolean onContextItemSelected(MenuItem item) { 

    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 

    switch(item.getItemId()){ 
     case R.id.single: 
      showDatePickerDialog(temp1); 

      break; 
     case R.id.showtotal: 
      Toast.makeText(this, "Delete : " , Toast.LENGTH_SHORT).show(); 
      break; 


    } 
    return true; 
    } 
    public void showDatePickerDialog(TextView t) { 

    temp=t; 
    DialogFragment newFragment = new DatePickerFragment(){ 
     @Override 
     public void onDateSet(DatePicker view, int year, int month, int day) { 
      Calendar calendar= Calendar.getInstance(); 
      calendar.set(year, month, day); 
      d1=new java.sql.Date(calendar.getTimeInMillis()); 
      temp.setText(""+d1); 
      Toast.makeText(GroupPage.this, "Date : "+temp1.getText() , Toast.LENGTH_SHORT).show(); 
      Intent i =new Intent(GroupPage.this,ShowPre.class); 
      i.putExtra("gid", stid); 
      i.putExtra("date", d1.toString()); 
      startActivity(i); 

     } 
    }; 
    newFragment.show(getSupportFragmentManager(), "datePicker"); 
    } 
} 

여기에 오류 로그입니다 :

05-09 12:45:29.617: E/AndroidRuntime(4338): FATAL EXCEPTION: main 
    05-09 12:45:29.617: E/AndroidRuntime(4338): android.view.InflateException: Couldn't resolve menu item onClick handler showDatePickerDialog in class com.example.attendence.GroupPage 
05-09 12:45:29.617: E/AndroidRuntime(4338): at android.view.MenuInflater$InflatedOnMenuItemClickListener.<init>(MenuInflater.java:202) 
    05-09 12:45:29.617: E/AndroidRuntime(4338): at android.view.MenuInflater$MenuState.setItem(MenuInflater.java:402) 
    05-09 12:45:29.617: E/AndroidRuntime(4338): at android.view.MenuInflater$MenuState.addItem(MenuInflater.java:436) 
    05-09 12:45:29.617: E/AndroidRuntime(4338): at android.view.MenuInflater.parseMenu(MenuInflater.java:173) 
    05-09 12:45:29.617: E/AndroidRuntime(4338): at android.view.MenuInflater.inflate(MenuInflater.java:95) 
    05-09 12:45:29.617: E/AndroidRuntime(4338): at com.example.attendence.GroupPage.onCreateContextMenu(GroupPage.java:117) 
    05-09 12:45:29.617: E/AndroidRuntime(4338): at android.view.View.createContextMenu(View.java:6194) 
    05-09 12:45:29.617: E/AndroidRuntime(4338): at com.android.internal.view.menu.ContextMenuBuilder.show(ContextMenuBuilder.java:81) 
    05-09 12:45:29.617: E/AndroidRuntime(4338): at com.android.internal.policy.impl.PhoneWindow$DecorView.showContextMenuForChild(PhoneWindow.java:2162) 
    05-09 12:45:29.617: E/AndroidRuntime(4338): at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:570) 
    05-09 12:45:29.617: E/AndroidRuntime(4338): at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:570) 
    05-09 12:45:29.617: E/AndroidRuntime(4338): at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:570) 
    05-09 12:45:29.617: E/AndroidRuntime(4338): at android.view.View.showContextMenu(View.java:3587) 
    05-09 12:45:29.617: E/AndroidRuntime(4338): at android.app.Activity.openContextMenu(Activity.java:2732) 
    05-09 12:45:29.617: E/AndroidRuntime(4338): at com.example.attendence.GroupPage$3.onClick(GroupPage.java:103) 
    05-09 12:45:29.617: E/AndroidRuntime(4338): at android.view.View.performClick(View.java:3517) 
    05-09 12:45:29.617: E/AndroidRuntime(4338): at android.view.View$PerformClick.run(View.java:14155) 
    05-09 12:45:29.617: E/AndroidRuntime(4338): at android.os.Handler.handleCallback(Handler.java:605) 
05-09 12:45:29.617: E/AndroidRuntime(4338): at android.os.Handler.dispatchMessage(Handler.java:92) 
    05-09 12:45:29.617: E/AndroidRuntime(4338): at android.os.Looper.loop(Looper.java:154) 
05-09 12:45:29.617: E/AndroidRuntime(4338): at android.app.ActivityThread.main(ActivityThread.java:4624) 
05-09 12:45:29.617: E/AndroidRuntime(4338): at java.lang.reflect.Method.invokeNative(Native Method) 
05-09 12:45:29.617: E/AndroidRuntime(4338): at java.lang.reflect.Method.invoke(Method.java:511) 
    05-09 12:45:29.617: E/AndroidRuntime(4338): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809) 
    05-09 12:45:29.617: E/AndroidRuntime(4338): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576) 
05-09 12:45:29.617: E/AndroidRuntime(4338): at dalvik.system.NativeStart.main(Native Method) 
05-09 12:45:29.617: E/AndroidRuntime(4338): Caused by: java.lang.NoSuchMethodException: showDatePickerDialog [interface android.view.MenuItem] 
    05-09 12:45:29.617: E/AndroidRuntime(4338): at java.lang.Class.getConstructorOrMethod(Class.java:460) 
05-09 12:45:29.617: E/AndroidRuntime(4338): at java.lang.Class.getMethod(Class.java:915) 
05-09 12:45:29.617: E/AndroidRuntime(4338): at android.view.MenuInflater$InflatedOnMenuItemClickListener.<init>(MenuInflater.java:200) 
05-09 12:45:29.617: E/AndroidRuntime(4338): ... 25 more 
+0

메뉴 파일처럼 무엇을 사용하는 경우에 메소드 서명을 변경해야합니까? 일부 비영리 속성을 사용 중일 수 있습니다. –

답변

1

당신은 XML 레이아웃 내부의 OnClick 속성을 선언한다.

onClick="showDatePickerDialog" 

onClick은 TextView가 아닌 ​​View 객체를 매개 변수로 사용합니다. 그래서 당신은이 방법

public void showDatePickerDialog(View t) 

또는 메뉴

public void showDatePickerDialog(MenuItem item) 
+0

MenuItem 항목을 인수로 사용하여 효과적입니다. Thnx 많이 :) 당신은 왜 v를 안드로이드 4.0에서 작동하지 않았다 말해줘 plz 수 있습니까? –

관련 문제