2016-08-12 5 views
1

NavigationDrawer에 머리글 이미지 나 아이콘을 추가하려고했지만 찾았거나 시도한 모든 예제는 구현에 유용하지 않습니다."RelativeLayout을 DrawerLayout에 캐스트 할 수 없습니다"오류를 해결하는 방법은 무엇입니까?

drawLayout을 relativeLayout onOptionsItemSelected로 변경하려고 시도했습니다.

@Override 
public boolean onOptionsItemSelected(MenuItem item){ 
    int id = item.getItemId(); 

    if(id == android.R.id.home){ 
     if(drawerLayout.isDrawerOpen(navList)){ 
      drawerLayout.closeDrawer(navList); 
     } 
     else 
     drawerLayout.openDrawer(navList); 
    } 
    return super.onOptionsItemSelected(item); 
} 
@Override 
public void onItemClick(AdapterView<?> parent,View view,int position, long id) { 
    loadSelection(position); 
    drawerLayout.closeDrawer(Gravity.LEFT); 
} 

오류

java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.support.v4.widget.DrawerLayout$LayoutParams 
    at android.support.v4.widget.DrawerLayout.isDrawerView(DrawerLayout.java:1415) 
    at android.support.v4.widget.DrawerLayout.isDrawerOpen(DrawerLayout.java:1677) 
    at acr.acr_app.MenuPrincipalActivity.onOptionsItemSelected(MenuPrincipalActivity.java:161) 
    at android.app.Activity.onMenuItemSelected(Activity.java:2925) 
    at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:403) 
    at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:189) 
    at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:100) 
    at android.support.v7.widget.ToolbarWidgetWrapper$1.onClick(ToolbarWidgetWrapper.java:192) 
    at android.view.View.performClick(View.java:4832) 
    at android.view.View$PerformClick.run(View.java:19844) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5319) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1016) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811) 

업데이트 레이아웃

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/drawerlayout"> 
<FrameLayout 
android:paddingTop="30dp" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:id="@+id/fragmentholder"> 
</FrameLayout> 

<RelativeLayout 
android:id="@+id/left_drawer" 
android:layout_width="240dp" 
android:layout_height="match_parent" 
android:layout_gravity="start" 
android:orientation="vertical" > 

<ImageView 
android:id="@+id/image_view" 
android:layout_width="match_parent" 
android:layout_height="200dp" 
android:background="@drawable/acr_home"/> 

    <ListView 
    android:layout_width="230dp" 
    android:layout_height="match_parent" 
    android:paddingTop="80dp" 
    android:id="@+id/navList" 
    android:background="@drawable/mb04" 
    android:layout_gravity="start"> 
    </ListView> 
    </RelativeLayout> 

    </android.support.v4.widget.DrawerLayout> 

Activity_main

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_menu_principal); 
    drawerLayout = (DrawerLayout) findViewById(R.id.drawerlayout); 
    navList = (ListView)findViewById(R.id.navList); 
    navList.setOnItemClickListener(this); 
    navList.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
    ArrayList<String> navArray = new ArrayList<String>(); 
    navArray.add("Home"); 
    navArray.add("Frag2"); 
    navArray.add("Frag3"); 
    navArray.add("Frag4"); 
    navArray.add("Frag5"); 

    (this,android.R.layout.simple_list_item_1,navArray); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String> (this,R.layout.my_text_view,navArray); 
    navList.setAdapter(adapter); 
    actionBarDrawerToogle = new ActionBarDrawerToggle(this,drawerLayout,R.string.opendrawer,R.string.closedrawer); 
    drawerLayout.addDrawerListener(actionBarDrawerToogle); 
    actionBar = getSupportActionBar(); 
    fragmentManager = getSupportFragmentManager(); 

    loadSelection(0); 
} 
+0

DrawerLayout는 다른 레이아웃과 같은 단지보기 그룹입니다. 다른 화면과 동일한 방식으로 이미지를 추가하십시오. – NoChinDeluxe

답변

1

문제점은 어떤 레이아웃이 onClick을 닫아야하는지 정확하게 바뀌지 않은 것이 었습니다.

@Override 
public boolean onOptionsItemSelected(MenuItem item){ 
    int id = item.getItemId(); 
    if(id == android.R.id.home){ 
     if(drawerLayout.isDrawerOpen(mDrawerRelativeLayout)){ 
      drawerLayout.closeDrawer(mDrawerRelativeLayout); 
     } 
     else 
     drawerLayout.openDrawer(mDrawerRelativeLayout); 
    } 
    return super.onOptionsItemSelected(item); 
} 

LAYOUT

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#e6e6ff" 
android:id="@+id/drawerlayout"> 
<FrameLayout 
    android:paddingTop="30dp" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/fragmentholder"> 
</FrameLayout> 

<RelativeLayout 
    android:id="@+id/left_drawer" 
    android:layout_width="240dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:background="#ffffff" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/image_view" 
     android:layout_width="match_parent" 
     android:layout_height="130dp" 
     android:background="@drawable/logodrawerlateral" /> 

    <ListView 
     android:id="@+id/navList" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_below="@id/image_view" 
     android:choiceMode="singleChoice" /> 
</RelativeLayout> 

1

레이아웃 내에 목록보기를 넣으면 목록보기 위에 이미지보기가 배치됩니다. 이 참조를 사용하십시오 http://thedeveloperworldisyours.com/android/put-image-navigation-drawer/#sthash.1l6ynBbz.dpbs

+0

그 예를 시도했지만이 오류가있는 Im : "java.lang.ClassCastException : android.widget.RelativeLayout $ LayoutParams를 android.support.v4.widget.DrawerLayout $ LayoutParams"로 캐스팅 할 수 없습니다. – Xaloju

+0

줄을 붙여주세요. MenuPrincipalActivity.onOptionsItemSelected (MenuPrincipalActivity .java : 161) 및 코드 블록 – Ramit

+0

closedrawer에서 navList를 새로운 relativeLayout으로 바꾸려고했지만 오류는 여전히 동일합니다. 답장을위한 Thx. – Xaloju