4

リスト項目がチェックされているときに取り消し線を引こうとしていますが、問題が 1 つあります。1 つの項目がチェックされると、別の項目に取り消し線が引かれますが、トースト メッセージは、チェックされている項目またはチェックされていない項目ごとに正しく表示されます。しかし、取り消し線機能の位置を設定する方法が見つかりません。どんな助けにも感謝します:)

OnItemClickListener itemClickListener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id) {

    ListView lv = (ListView) a;
    if (lv.isItemChecked(position)) {
        Toast.makeText(getBaseContext(), "You checked " + values.get(position), Toast.LENGTH_SHORT).show();

        TextView row = (TextView) findViewById(android.R.id.text1);
        row.setPaintFlags(row.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

    } 
    else {
        Toast.makeText(getBaseContext(), "You unchecked " + values.get(position), Toast.LENGTH_SHORT).show();

        TextView row = (TextView) findViewById(android.R.id.text1);
        row.setPaintFlags(row.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG);

    }
}
};

TextView 行 = (TextView)lv.getItemAtPosition(position) が使用されている場合、アプリケーションは失敗します - logcat:

1-08 16:39:30.373: E/AndroidRuntime(1934): キャッチされていないハンドラー: キャッチされていない例外が原因で終了するスレッドのメイン 01-08 16:39:30.383: E/AndroidRuntime(1934): java.lang.ClassCastException: java. lang.String 01-08 16:39:30.383: E/AndroidRuntime(1934): com.jms.purchaseexamples.MainActivity$1.onItemClick(MainActivity.java:72) 01-08 16:39:30.383: E/AndroidRuntime( 1934): android.widget.AdapterView.performItemClick(AdapterView.java:284) 01-08 16:39:30.383: E/AndroidRuntime(1934): android.widget.ListView.performItemClick(ListView.java:3285) 01 -08 16:39:30.383: E/AndroidRuntime(1934): android.widget.AbsListView$PerformClick.run(AbsListView.java:1640) 01-08 16:39:30.383: E/AndroidRuntime(1934): Android で.os.Handler.handleCallback(Handler.java:587) 01-08 16:39:30.383: E/AndroidRuntime(1934): android.os.Handler で。dispatchMessage(Handler.java:92) 01-08 16:39:30.383: E/AndroidRuntime(1934): android.os.Looper.loop(Looper.java:123) 01-08 16:39:30.383: E/ AndroidRuntime(1934): android.app.ActivityThread.main(ActivityThread.java:4363) 01-08 16:39:30.383: E/AndroidRuntime(1934): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) で01-08 16:39:30.383: E/AndroidRuntime(1934): java.lang.reflect.Method.invoke(Method.java:521) 01-08 16:39:30.383: E/AndroidRuntime(1934): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 01-08 16:39:30.383: E/AndroidRuntime(1934): com.android.internal.os.ZygoteInit.main(ZygoteInit) .java:618) 01-08 16:39:30.383: E/AndroidRuntime (1934): dalvik.system.NativeStart.main (ネイティブ メソッド) でLooper.loop(Looper.java:123) 01-08 16:39:30.383: E/AndroidRuntime(1934): android.app.ActivityThread.main(ActivityThread.java:4363) 01-08 16:39:30.383: E/AndroidRuntime(1934): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) 01-08 16:39:30.383: E/AndroidRuntime(1934): java.lang.reflect.Method.invoke(Method. java:521) 01-08 16:39:30.383: E/AndroidRuntime(1934): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 01-08 16:39:30.383: E/AndroidRuntime (1934): com.android.internal.os.ZygoteInit.main (ZygoteInit.java:618) 01-08 16:39:30.383: E/AndroidRuntime (1934): dalvik.system.NativeStart.main で(ネイティブメソッド)Looper.loop(Looper.java:123) 01-08 16:39:30.383: E/AndroidRuntime(1934): android.app.ActivityThread.main(ActivityThread.java:4363) 01-08 16:39:30.383: E/AndroidRuntime(1934): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) 01-08 16:39:30.383: E/AndroidRuntime(1934): java.lang.reflect.Method.invoke(Method. java:521) 01-08 16:39:30.383: E/AndroidRuntime(1934): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 01-08 16:39:30.383: E/AndroidRuntime (1934): com.android.internal.os.ZygoteInit.main (ZygoteInit.java:618) 01-08 16:39:30.383: E/AndroidRuntime (1934): dalvik.system.NativeStart.main で(ネイティブメソッド)java.lang.reflect.Method.invokeNative(ネイティブ メソッド) 01-08 16:39:30.383: E/AndroidRuntime(1934): java.lang.reflect.Method.invoke(Method.java:521) 01-08 16:39:30.383: E/AndroidRuntime(1934): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 01-08 16:39:30.383: E/AndroidRuntime(1934): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 01-08 16:39:30.383: E/AndroidRuntime(1934): dalvik.system.NativeStart.main(ネイティブメソッド)java.lang.reflect.Method.invokeNative(ネイティブ メソッド) 01-08 16:39:30.383: E/AndroidRuntime(1934): java.lang.reflect.Method.invoke(Method.java:521) 01-08 16:39:30.383: E/AndroidRuntime(1934): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 01-08 16:39:30.383: E/AndroidRuntime(1934): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 01-08 16:39:30.383: E/AndroidRuntime(1934): dalvik.system.NativeStart.main(ネイティブメソッド)os.ZygoteInit.main (ZygoteInit.java:618) 01-08 16:39:30.383: E/AndroidRuntime (1934): dalvik.system.NativeStart.main (ネイティブ メソッド) でos.ZygoteInit.main (ZygoteInit.java:618) 01-08 16:39:30.383: E/AndroidRuntime (1934): dalvik.system.NativeStart.main (ネイティブ メソッド) で

4

1 に答える 1

3

クリックしてチェックした行を実際に選択した場所がわかりませんか?findViewById(android.R.id.text1) は、あなたが望むもののようには見えません..

どうですか:

//Actually select the correct item from the listview
TextView row = (TextView)lv.getItemAtPosition(position);
row.setPaintFlags(row.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG);
于 2013-01-07T21:05:49.453 に答える