2014-10-30 2 views
0

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 (네이티브 메서드)

+0

코드에서'mDrawer'를 찾을 수 없습니다 ... –

+0

onCreate 전에 mMenuDrawer를 초기화 했습니까? 아니면 뭔가 잘못하고있는 것입니까? –

+0

'Mainactivity.onCreate with mDrawer highlighted'. 'mDrawer'는 어디에 있습니까? 'mMenuDrawer'라는 뜻입니까? –

답변

0

마지막으로이 문제를 해결했습니다. 문제는 내 lib 참조에서 발생했습니다. 나는 자바 라이브러리에서 내 lib 클래스 폴더를 추가해야했다.> 라이브러리> 클래스 폴더를 추가한다. 그리고 simonvt 안에 menudrawer 폴더를 선택했습니다. 그런 다음 주문하고 수출하고 폴더를 선택했습니다. 고마워.

관련 문제