クリックしたアイテムのIDを取得する必要があります。だからbindViewで私はidをholder.layout.setTag(id)でviewHolderに設定し、onClickではview.getTagでこの値を取得します。私はそれを実行するときにこのコードは正常に動作しますが、私はいくつかのアイテムのアプリのクラッシュとログで私はClassCastException javaLanString bindViewで見ることができますそれをスクロールを開始します。だから、setTagとgetTagコードが完璧に機能しなければ。 数時間後にClassCastExceptionを取得する理由を理解しようとしましたが、回答が見つかりませんでした。アイデアはありますか?CursorAdapterでスクロールするとクラッシュ・アプリケーションになる
@Override
public void bindView(View view, Context context, Cursor cursor) {
ViewHolder holder = (ViewHolder) view.getTag();
String value = cursor.getString(itemId);
Log.i("MINE", value);
holder.layout.setTag(value);
holder.name.setText(cursor.getString(itemName));
holder.country.setText(cursor.getString(itemCountry));
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view = inflater.inflate(com.home.R.layout.item_list_row,
parent, false);
ViewHolder holder = new ViewHolder(
(TextView) view.findViewById(com.home.R.id.item_row_name),
(TextView) view.findViewById(com.home.R.id.item_row_population),
(TextView) view.findViewById(com.home.R.id.item_row_country),
(ImageView) view.findViewById(com.home.R.id.icon),
(View) view.findViewById(R.id.row_item));
view.setTag(holder);
view.setOnClickListener(this);
return view;
}
private static final class ViewHolder {
final TextView name;
final TextView population;
final TextView country;
final ImageView icon;
final View layout;
public ViewHolder(TextView name, TextView population, TextView country,
ImageView icon, View layout) {
this.name = name;
this.population = population;
this.country = country;
this.icon = icon;
this.layout = layout;
}
}
編集:私は、この行でエラーViewHolderホルダー=(ViewHolder)view.getTag()を取得します。以下はエラーが発生した場所を示すstacktraceです。 09-15 13:35:21.586:ERROR/AndroidRuntime(2175):致命的例外:メイン 09-15 13:35:21.586:ERROR/AndroidRuntime(2175):java.lang .ClassCastException:java.lang.String 09-15 13:35:21.586:ERROR/AndroidRuntime(2175):com.dataart.representation.ItemsAdapter.bindView(ItemsAdapter.java:38) 09-15 13:35: 21.586:ERROR/AndroidRuntime(2175):android.widget.CursorAdapter.getView(CursorAdapter.java:186) 09-15 13:35:21.586:ERROR/AndroidRuntime(2175):android.widget.AbsListView.obtainView (リストビュー):09-15 13:35:21.586:ERROR/AndroidRuntime(2175):android.widget.ListView.addViewBelow(ListView.java:2914) 09-15 13:35:21.586:ERROR/AndroidRuntime(2175):android.widget.ListView.scrollListItemsBy(ListV (2175):android.widget.ListScrollImpl(ListView.java:2340) 09-15 13:35:21.586:ERROR/AndroidRuntime(2175):エラー: AndroidRuntime(2175):android.widget.ListView.arrowScroll(ListView.java:2287) 09-15 13:35:21.586:ERROR/AndroidRuntime(2175):android.widget.ListView.commonKey(ListView.java: AndroidRuntime(2175):android.widget.ListView.onKeyDown(ListView.java:2036) 09-15 13:35:21.586:ERROR/AndroidRuntime(2175) 09-15 13:35:21.586: :android.view.KeyEvent.dispatch(KeyEvent.java:1256) 09-15 13:35:21.586:ERROR/AndroidRuntime(2175):android.view.View.dispatchKeyEvent(View.java:3855) 09 -15 13:35:21.586:ERROR/AndroidRuntime(2175):android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:787) 09-15 13:35:21.586:ERROR/AndroidRuntime(2175):android.widget.ListView.dispatchKeyEvent(ListView.java:2021) 09-15 13:35:21.586:ERROR/AndroidRuntime(2175):at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:789) 09-15 13:35:21.586:ERROR/AndroidRuntime(2175):android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:789) 09-15 13:35:21.586:ERROR/AndroidRuntime(2175):android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:789) 09-15 13:35:21.586:ERROR/AndroidRuntime(2175):android.view。 ViewGroup.dispatchKeyEvent(ViewGroup.java:789) 09-15 13:35:21.586:エラー/ AndroidRuntime(2175):com.android.internal.policy.impl.PhoneWindow $ DecorView.superDispatchKeyEvent(PhoneWindow.java:1687) 09-15 13:35:21.586:ERROR/AndroidRuntime(2175):at com.android.internal.p olicy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1120) 09-15 13:35:21.586:ERROR/AndroidRuntime(2175):android.app.Activity.dispatchKeyEvent(Activity.java:2073) 09-15 13:35:21.586:ERROR/AndroidRuntime(2175):com.android.internal.policy.impl.PhoneWindow $ DecorView.dispatchKeyEvent(PhoneWindow.java:1663) 09-15 13:35:21.586:ERROR/AndroidRuntime 2175):android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2560) 09-15 13:35:21.586:ERROR/AndroidRuntime(2175):android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2535) 09-15 13:35:21.586:ERROR/AndroidRuntime(2175):android.view.ViewRoot.handleMessage(ViewRoot.java:1867) 09-15 13:35:21.586:ERROR/AndroidRuntime(2175):at android.os.Handler.dispatchMessage(ハンドラ。java:99) 09-15 13:35:21.586:ERROR/AndroidRuntime(2175):android.os.Looper.loop(Looper.java:123) 09-15 13:35:21.586:ERROR/AndroidRuntime 2175):android.app.ActivityThread.main(ActivityThread.java:3647) 09-15 13:35:21.586:ERROR/AndroidRuntime(2175):java.lang.reflect.Method.invokeNative(ネイティブメソッド) AndroidRuntime(2175):java.lang.reflect.Method.invoke(Method.java:507) 09-15 13:35:21.586:ERROR/AndroidRuntime(2175): com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839) 09-15 13:35:21.586:ERROR/AndroidRuntime(2175):com.android.internal.os.ZygoteInit.main (ZygoteInit.java:597) 09-15 13:35:21.586:ERROR/AndroidRuntime(2175):at dalvik.system.NativeStart.main(ネイティブメソッド)
スタックトレースから完全なエラーラインを提供し、コードリストのどこにエラーが発生しているかを示す必要があります。また、 'holder.layout'の' setTag() 'をなぜ呼び出すのか分かりません。これは通常ホルダーパターンの一部ではありません。 – CommonsWare
あなたの答えをありがとう、マーク。私の奇妙な決定はどうですか - はい、あなたは絶対に正しいですが、私はアイテムのIDを取得する必要があり、これは私がうっとりすることができる解決策です。私は正しい方法でそれを行う方法をアドバイスしてもらえますか? –