私はナビゲーションドロワーを持っており、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はメインクラスで2回、GoogleチュートリアルがDrawerオブジェクトの匿名クラスを移動した新しいクラスで2回開始されたからです。
また、特にNavigation Drawerから項目を取得する方法については、SOに記載されているケースがあります。問題は簡単に直感的にサイズ変更可能ですがListView.getItemAtPosition()
です。 1つのクラスに戻り、すべてが機能しています。
の可能性のある重複(http://stackoverflow.com/質問/ 218384/what-is-a-nullpointのレセプションと方法は - 私はそれを修正する) –
私はそうは思わない。問題はNPEではないが、実際にはlistviewはnullではなく、テキストを私に与えるべきである。 – trocchietto
Rotwang、それを持っています。混乱は、GoogleチュートリアルがインターフェイスonItemClickListenerを拡張する別のクラスを呼び出すという事実から始まるので、リストビューのmDrawerListは匿名ではなく、他の人のFaisalは同じIDを参照するリストビューを2回インスタンス化した。可能であれば、upvoteを削除することができますか?それは、 – trocchietto