Navigation Drawer가 있고 ListView에서 항목 내부의 내용을 검색하려면 클릭 할 것입니다. 위치를 검색 할 수 있지만 클릭 한 항목의 콘텐츠를 가져 오기 위해 목록보기에 연결할 수 없습니다. 디버거에서 내가 그 목록보기를 존재보고 내가 xml 파일에있는 그 left_drawer ID가 동일 나타내는 경우도 내가 검색하려고 :NPE를 얻으면 탐색 창에서 클릭 한 위치에서 ListView 내용을 검색 할 수 없습니다.
android.widget.ListView{634ed4d VFED.VC.. .F..H.ID 0,0-630,1731 #7f0e004f app:id/left_drawer}
그래서 내가 잘못 뭘 오전 궁금 NPE가 왜 나는 항목
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
//I have the position of the list view, and want to retrieve the content of the selected item at that position
ListView listView = (ListView) view.findViewById(R.id.left_drawer);
String sk = (String) listView.getItemAtPosition(position);//NPE because listView is null?
Log.d("DEBUG", "onItemClick: "+sk);
// listView.getChildAt(0);
//listView.getSelectedItem();
}
}
를 검색하지 않습니다 그리고이 오류 메시지가
Process: android.com.myapp, PID: 28051 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.widget.ListView.getItemAtPosition(int)' on a null object reference
at android.com.myapp.DrawerItemClickListener.onItemClick(DrawerItemClickListener.java:22)
이 탐색 창
입니다 제 생각에는<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
>
<!-- The main content view -->
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fragment_as_list"
android:name="android.com.myApp.FragmentA"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<ListView android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="19dp"
android:background="@drawable/image_background"
android:paddingTop="?android:attr/actionBarSize"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
/>
</android.support.v4.widget.DrawerLayout>
업데이트
이 사소한 NPE 질문이 아니다. 제거하기 위해 조건을 설정하려고해도 ListView는 메인 클래스에서 한 번 두 번 시작되었으므로 예외적입니다. Google지도에서 Drawer 객체를 익명 클래스로 옮긴 새 클래스에서 다른 시간에 다시 시작 되었기 때문입니다.
Navigation Drawer에서 항목을 구체적으로 검색하는 방법에 대해서는 SO에 언급 된 모든 경우가 있습니다. 문제는 직관적으로 간단하게 ListView.getItemAtPosition()
으로 크기를 조정할 수 있습니다. 하나의 클래스를 되돌려 보면 모든 것이 작동하고 있습니다.
의 사용 가능한 복제 [? NullPointerException이 무엇인가, 나는 그것을 해결 어떻게 (http://stackoverflow.com/ 질문/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) –
나는 그렇게 생각하지 않는다. 문제는 NPE를 넘지는 않지만 listview가 null이 아니어야하고 텍스트가 나에게 주어져서는 안된다. – trocchietto
Rotwang, 알겠습니다. 혼란은 Google 자습서가 onItemClickListener 인터페이스를 확장하는 다른 클래스를 호출한다는 사실에서 시작됩니다. 익명이 아니므로 List View mDrawerList가 범위를 벗어났습니다. 다른 사람이 Faisal이 응답 한 것처럼 동일한 ID를 참조하는 List View를 두 번 인스턴스화했습니다. 가능한 경우 upvote를 제거 할 수 있겠습니까? – trocchietto