simbev 라이브러리가있는 메뉴 서랍에 대한 gthub 자습서를 따르고 있습니다. Ave는 이것을 내 프로젝트로 구현하려했으나 2 일 동안 문제를 파악할 수 없습니다. 나는 응용 프로그램을 디버깅하려하고 null 값으로 강조 표시된 mMenuDrawer를 사용하여 Mainactivity.onCreate에서 예외 오류가 발생합니다. 제발 누군가가 내게 문제 감사를 이해할 수 있습니다. 32 : 04.260 :mMenuDrawer는 logcat에서 null을 반환합니다.
package net.simonvt.menudrawer.samples;
import net.simonvt.menudrawer.MenuDrawer;
import net.simonvt.menudrawer.Position;
import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class RightMenuSample extends Activity {
private static final String STATE_ACTIVE_POSITION = "net.simonvt.menudrawer.samples.RightMenuSample.activePosition";
private static final String STATE_CONTENT_TEXT = "net.simonvt.menudrawer.samples.RightMenuSample.contentText";
private static final int MENU_OVERFLOW = 1;
private MenuDrawer mMenuDrawer;
private MenuAdapter mAdapter;
private ListView mList;
private int mActivePosition = -1;
private String mContentText;
private TextView mContentTextView;
@Override
protected void onCreate(Bundle inState) {
super.onCreate(inState);
if (inState != null) {
mActivePosition = inState.getInt(STATE_ACTIVE_POSITION);
mContentText = inState.getString(STATE_CONTENT_TEXT);
}
mMenuDrawer = MenuDrawer.attach(this, MenuDrawer.MENU_DRAG_CONTENT, Position.RIGHT);
mMenuDrawer.setContentView(R.layout.activity_rightmenu);
List<Object> items = new ArrayList<Object>();
items.add(new Item("Item 1", R.drawable.ic_action_refresh_dark));
items.add(new Item("Item 2", R.drawable.ic_action_select_all_dark));
items.add(new Category("Cat 1"));
items.add(new Item("Item 3", R.drawable.ic_action_refresh_dark));
items.add(new Item("Item 4", R.drawable.ic_action_select_all_dark));
items.add(new Category("Cat 2"));
items.add(new Item("Item 5", R.drawable.ic_action_refresh_dark));
items.add(new Item("Item 6", R.drawable.ic_action_select_all_dark));
// A custom ListView is needed so the drawer can be notified when it's scrolled. This is to update the position
// of the arrow indicator.
mList = new ListView(this);
mAdapter = new MenuAdapter(items);
mList.setAdapter(mAdapter);mList.setOnItemClickListener(mItemClickListener);
mMenuDrawer.setMenuView(mList);
mContentTextView = (TextView) findViewById(R.id.contentText);
mContentTextView.setText(mContentText);
}
private
AdapterView.OnItemClickListener
mItemClickListener = new
AdapterView.OnItemClickListener() {
@Override
public void
onItemClick(AdapterView<?> parent, View view, int position, long id) {
mActivePosition = position;
mMenuDrawer.setActiveView(view, position);
mContentTextView.setText(((TextView) view).getText());
mMenuDrawer.closeMenu();
}
};
@Override
protected void
onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(STATE_ACTIVE_POSITION, mActivePosition);
outState.putString(STATE_CONTENT_TEXT, mContentText);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem overflowItem = menu.add(0, MENU_OVERFLOW, 0, null);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
overflowItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
}
overflowItem.setIcon(R.drawable.ic_menu_moreoverflow_normal_holo_light);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_OVERFLOW:
mMenuDrawer.toggleMenu();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
final int drawerState = mMenuDrawer.getDrawerState();
if (drawerState == MenuDrawer.STATE_OPEN || drawerState == MenuDrawer.STATE_OPENING) {
mMenuDrawer.closeMenu();
return;
}
super.onBackPressed();
}
private static class Item {
String mTitle;
int mIconRes;
Item(String title, int iconRes) {
mTitle = title;
mIconRes = iconRes;
}
}
private static class Category {
String mTitle;
Category(String title) {
mTitle = title;
}
}
private class MenuAdapter extends BaseAdapter {
private List<Object> mItems;
MenuAdapter(List<Object> items) {
mItems = items;
}
@Override
public int getCount() {
return mItems.size();
}
@Override
public Object getItem(int position) {
return mItems.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return getItem(position) instanceof Item ? 0 : 1;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public boolean isEnabled(int position) {
return getItem(position) instanceof Item;
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
Object item = getItem(position);
if (item instanceof Category) {
if (v == null) {
v = getLayoutInflater().inflate(R.layout.menu_row_category, parent, false);
}
((TextView) v).setText(((Category) item).mTitle);
} else {
if (v == null) {
v = getLayoutInflater().inflate(R.layout.menu_row_item, parent, false);
}
TextView tv = (TextView) v;
tv.setText(((Item) item).mTitle);
tv.setCompoundDrawablesWithIntrinsicBounds(((Item) item).mIconRes, 0, 0, 0);
}
v.setTag(R.id.mdActiveViewPosition, position);
if (position == mActivePosition) {
mMenuDrawer.setActiveView(v, position);
}
return v;
}
}
}
이 내 로그 캣
10 ~ 30 11 dalvikvm/W (21881) : 실행 vFy : 찾을 수없는 서명에서 참조 클래스 (LNET/simonvt/menudrawer/MenuDrawer;) 10-30 11 : 32 : 04.265 : I/dalvikvm (21881) : 메서드 com.example.grossbeatwindow.MainActivity.onBackPressed에서 참조하는 net.simonvt.menudrawer.MenuDrawer.getDrawerState 메서드를 찾을 수 없습니다. 10 -30 11 : 32 : 04.265 : W/dalvikvm (21881) : VFY : 가상 메소드를 확인할 수 없습니다. 4305 : Lnet/simonvt/menudrawer/MenuDrawer; .getDrawerState() I 012 0x16e를 0x0002로 바꾼다 10-30 11 : 32 : 04.265 : W/dalvikvm (21881) : VFY : 정적 필드 1103을 해결할 수 없음 RIGHT) in Lnet/simonvt/menudrawer/Position; 10-30 11 : 32 : 04.265 : D/dalvikvm (21881) : VFY : 0x001b에서 opcode 0x62 대체 10-30 11 : 32 : 04.265 : I/dalvikvm (21881) : 메서드 net.simonvt.menudrawer를 찾을 수 없습니다. .MenuDrawer.toggleMenu, 메서드 com.example.grossbeatwindow.MainActivity.onOptionsItemSelected에서 참조 됨 10-30 11 : 32 : 04.265 : W/dalvikvm (21881) : VFY : 가상 메서드를 확인할 수 없습니다. 4309 : Lnet/simonvt/menudrawer/MenuDrawer VFY : 0x000e에서 opcode 0x6e 바꾸기 10-30 11 : 32 : 04.265 : V/Dalvikvm (21881) : VFY : VFY : 0x000e에서 opcode 0x6e 바꾸기 서명에서 참조 된 클래스를 찾으려면 10-30 11 : 32 : 04.265 : I/dalvikvm (21881) : 메서드에서 참조 된 net.simonvt.menudrawer.MenuDrawer.MetDrawer.setActiveView 메서드를 찾을 수 없습니다. 기본 액티비티 $ 1.onItemClick 10-30 11 : 32 : 04.265 : V/VY : 가상 메서드를 확인할 수 없습니다. 11 : 32 : 04.265 : D/dalvikvm (21881) : VFY : 0x000b에서 opcode 0x6e 바꾸기 10-30 11 : 32 : 04.280 : D/AndroidRuntime (21881) : VM 종료 10-30 11 : 32 : 04.280 : d/dalvikvm (21881) : threadid = 1 : catch되지 않은 예외 (thread) = 스레드가 종료 됨 (그룹 = 0x41e0b700) 10-30 11 : 32 : 04.285 : E/AndroidRuntime (21881) : 치명적인 예외 : 주 10-30 11:32 : 04/2085 : E/AndroidRuntime (21881) : java.lang.NoClassDefFoundError : net.simonvt.menudrawer.Position 10-30 11 : 32 : 04.285 : E/AndroidRuntime (21881) : com.example.grossbeatwindow.MainActivity.onCreate에서 MainActivity.java:47) 10-30 11 : 32 : 04.285 : E/AndroidRuntime (21881) : android.ap (Actual.java:1104) 10-30 11 : 32 : 04.285 : E/32 : 04.285 : E/AndroidRuntime (21881) : android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2257) 10-30 11 : 32 : 04.285 : E/AndroidRuntime (21881) : android.app.ActivityThread. handleLaunchActivity (ActivityThread.java:2349) 10-30 11 : 32 : 04.285 : E/AndroidRuntime (21881) : android.app.ActivityThread.access $ 700 (ActivityThread.java:159) 10-30 11 : 32 : 04.285 : E/AndroidRuntime (21881) : android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1316) 10-30 11 : 32 : 04.285 : E/AndroidRuntime (21881) : android.os.Handler.dispatchMessage (Handler.java:99) 10-30 11 : 32 : 04.285 : E/AndroidRunti (21881) : android.os.Looper.loop (Looper.java:176) 10-30 11 : 32 : 04.285 : E/AndroidRuntime (21881) : android.app.ActivityThread.main (ActivityThread.java : 5419) 10-30 11:32:04.285 : E/AndroidRuntime (21881) : java.lang.reflect.Method.invokeNative (네이티브 메소드) 10-30 11 : 32 : 04.285 : E/AndroidRuntime (21881) : java.lang.reflect.Method.invoke에서 (Method.java:525) 10-30 11 : 32 : 04.285 : E/AndroidRuntime (21881) : com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1046) 10-30 11 : 32 : 04.285 : E/AndroidRuntime (21881) : com.android.internal.os.ZygoteInit.main (ZygoteInit.java:862) 10-30 11 : 32 : 04.285 : E/AndroidRuntime (21881) : at dalvik .system.NativeStart.main (네이티브 메서드)
코드에서'mDrawer'를 찾을 수 없습니다 ... –
onCreate 전에 mMenuDrawer를 초기화 했습니까? 아니면 뭔가 잘못하고있는 것입니까? –
'Mainactivity.onCreate with mDrawer highlighted'. 'mDrawer'는 어디에 있습니까? 'mMenuDrawer'라는 뜻입니까? –