2011-09-15 6 views
2

クリックしたアイテムの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(ネイティブメソッド)

+0

スタックトレースから完全なエラーラインを提供し、コードリストのどこにエラーが発生しているかを示す必要があります。また、 'holder.layout'の' setTag() 'をなぜ呼び出すのか分かりません。これは通常ホルダーパターンの一部ではありません。 – CommonsWare

+0

あなたの答えをありがとう、マーク。私の奇妙な決定はどうですか - はい、あなたは絶対に正しいですが、私はアイテムのIDを取得する必要があり、これは私がうっとりすることができる解決策です。私は正しい方法でそれを行う方法をアドバイスしてもらえますか? –

答えて

1

Stringを使用してsetTag()と電話していて、先にViewHolderで行ったsetTag()を上書きします。

StringsetTag()に電話する必要はありません。あなたの_IDの値は、CursorAdaptergetItemId()を呼び出していつでも取得できます。

答えが受け入れられない場合は、にlong idデータメンバーを追加し、_IDを入力してください。

+0

私は自分の不注意を恥じています。ありがとう、マーク - 第二のアドバイスは私を助けます。 _onClick()_メソッドでは、私は位置変数を持っていないので、私は最初のアプローチを使用することはできません。 –

関連する問題