Android 如何从ListView获取文本视图而不单击?
我从Android开始,使用Android 如何从ListView获取文本视图而不单击?,android,listview,textview,Android,Listview,Textview,我从Android开始,使用ListActivity创建一个基本的待办事项列表。本质上,每次单击一个项目(条目)时,该项目都会在其相应的SharedReferences文件中被标记(或未标记)。此外,还使用setPaintFlags对相应的TextView进行斜杠(或取消斜杠),如下所示: protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(
ListActivity
创建一个基本的待办事项列表。本质上,每次单击一个项目(条目)时,该项目都会在其相应的SharedReferences
文件中被标记(或未标记)。此外,还使用setPaintFlags
对相应的TextView
进行斜杠(或取消斜杠),如下所示:
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
SharedPreferences savedList = this.getPreferences(0);
String item = savedList.getString(position + "", "");
if ( item.contains(checked) ) {
item = item.replace(checked,"");
SaveItem(item, position);
((TextView)v).setPaintFlags( ((TextView)v).getPaintFlags() & (~ Paint.STRIKE_THRU_TEXT_FLAG));
}
else {
item = checked + item;
SaveItem(item,position);
((TextView)v).setPaintFlags( ((TextView)v).getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
}
}
for (int i = 0;; i++){
pos = i;
listitems = savedList.getString(""+i,"");
if (listitems.matches("")){ //if first entry in saved file is empty, stop the loop
break;
}
else if(listitems.contains(checked)){
listitems.replace(checked,"");
listItems.add(listitems);
adapter.notifyDataSetChanged();
TextView textview = (TextView) (getListView()).getChildAt(i);
textview.setPaintFlags( textview.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
}
else{
listItems.add(listitems);
adapter.notifyDataSetChanged();
}
}
(这里的“选中”只是一个字符串。)
在OnCreate
方法中,要读取SharedReferences
文件以重新加载清单中的项目,并且对于已标记的项目,我想再次将其删除,如下所示:
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
SharedPreferences savedList = this.getPreferences(0);
String item = savedList.getString(position + "", "");
if ( item.contains(checked) ) {
item = item.replace(checked,"");
SaveItem(item, position);
((TextView)v).setPaintFlags( ((TextView)v).getPaintFlags() & (~ Paint.STRIKE_THRU_TEXT_FLAG));
}
else {
item = checked + item;
SaveItem(item,position);
((TextView)v).setPaintFlags( ((TextView)v).getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
}
}
for (int i = 0;; i++){
pos = i;
listitems = savedList.getString(""+i,"");
if (listitems.matches("")){ //if first entry in saved file is empty, stop the loop
break;
}
else if(listitems.contains(checked)){
listitems.replace(checked,"");
listItems.add(listitems);
adapter.notifyDataSetChanged();
TextView textview = (TextView) (getListView()).getChildAt(i);
textview.setPaintFlags( textview.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
}
else{
listItems.add(listitems);
adapter.notifyDataSetChanged();
}
}
这似乎不起作用,出现了两个问题:第一,即使我从已检查的项目中删除了“已检查”,但出现在ListView
中的项目仍然有一个“已检查”。其次,罢工没有出现,这让我相信相应的TextView
没有被发现
编辑:忘记包含某些内容。查看v不是文本视图,如果您的文本视图有id,您可以使用
v.findViewById
在onListItemClick
上查找您的目标文本视图
TextView textview = (TextView) (getListView()).getChildAt(i);
您还可以使用
getListView().getChildAt(i).findViewByid
我没有正确地获取问题,但无论从列表项中获取您想要的Textview
在您的onListItem中,单击
可以获取您的Textview
TextView textview = ((TextView) ((ViewGroup) v).getChildAt(1));
其中
getChildAt(1)
1是列表项的索引号您的最后一行不返回整数吗?而我希望从ListView中检索TextView。