如何在没有Click的情况下从ListView获取TextView?

时间:2014-06-20 03:03:11

标签: android listview textview

我开始使用Android并使用ListActivity创建基本待办事项列表。基本上,每次点击一个项目(一个条目)时,该项目在其对应的SharedPreferences文件中被标记(或未标记)。此外,相应的TextView也使用setPaintFlags进行了大幅削减(或删除),如下所示:

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);
    }       
}

("选中"这里只是一个字符串。) 在OnCreate方法中,要阅读SharedPreferences文件以重新加载核对清单中的项目,以及标记的任何项目,我想再次将其删除,如下所示:

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没有被捡起来。

编辑:忘了包含一些东西。

2 个答案:

答案 0 :(得分:0)

View v不是TextView,如果TextView有ID,您可以使用v.findViewByIdonListItemClick上找到目标TextView;

TextView textview = (TextView) (getListView()).getChildAt(i);

您也可以使用getListView().getChildAt(i).findViewByid

答案 1 :(得分:0)

我无法正确地回答问题,但无论我从列表项中得到什么TextviewonListItemClick,您可以获得Textview

TextView textview = ((TextView) ((ViewGroup) v).getChildAt(1));

其中getChildAt(1) 1 是列表项的索引号