检查时如何在列表视图中删除文本项?

Posted

技术标签:

【中文标题】检查时如何在列表视图中删除文本项?【英文标题】:How to strikethrough text items in listview when checked? 【发布时间】:2012-12-21 15:40:25 【问题描述】:

我试图在选中列表项时删除它们,但是,有一个问题:一旦选中一个项目,另一个项目就会被删除,但是,对于每个选中或未选中的项目,toast 消息都会正确显示。但我找不到设置删除线功能位置的方法。将不胜感激任何帮助:)

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 row = (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(Native Method) 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): at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

【参考方案1】:

我没有看到您实际在哪里选择了被点击检查的行? 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);

【讨论】:

看起来简单又好用,但是一旦项目被检查,应用程序就会崩溃 =( 你能把logcat的输出贴在顶部吗?它得到了什么错误 如果它可以帮助我使用以下列表布局:simple_list_item_multiple_choice

以上是关于检查时如何在列表视图中删除文本项?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 Eclipse 深色主题中选定文本项的黑色前景色

SQL Server 2008 r2:如何检查所有视图的运行时错误?

如何在 SwiftUI 中将删除线()应用于点击的 foreach 文本项?

当检查可以是字符串数组中的一个或多个项目时,如何将列表视图项目添加到数组中?

多选模式列表视图行在删除后保持选中状态

如何从适配器的 getItemView() 方法内的列表视图中删除项目?