我正在做一些待办事项列表,而我遇到的一个问题就是当我点击列表视图中的某个项目时,我无法弄明白如何制作它,该行中的文字会获得删除线效果。我知道我应该打电话:
TextView text = (TextView)view.findViewById(android.R.id.text);
text.setPaintFlags(text1.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
我在onListItemClick
上调用它,但是当我点击某个项目时它会崩溃。有什么建议吗?
答案 0 :(得分:3)
以下代码适用于我,其中联系人信息显示为列表,单击列表项时,联系人姓名将被删除。
将权限“android.permission.READ_CONTACTS”添加到清单文件以测试以下代码。
public class MyListActivity extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] projection={ContactsContract.Contacts.DISPLAY_NAME,ContactsContract.Contacts._ID};
int[] to={android.R.id.text1,android.R.id.text2};
Cursor c=getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, projection, null, null, null);
setListAdapter(new SimpleCursorAdapter(this,android.R.layout.simple_list_item_2,c,projection,to));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
TextView tv=(TextView) v.findViewById(android.R.id.text1);
tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
}
}
我在API级别8中找不到资源ID“android.R.id.text”,可能需要在代码中更正此内容。
PS:修改textview属性是不正确的,因为框架会回收视图,并且无法保证每个待办事项列表项都有单独的视图。理想的方法是存储需要删除的列表项的位置,并通过扩展适配器覆盖getView()方法,并根据当前列表项的存储状态设置正确的绘制标记。