我有烦人的问题。我为ListView创建了简单的ArrayAdapter。
ArrayAdapter<String> adapter = new ArrayAdapter<>(InsideNotebookActivity.this, android.R.layout.simple_list_item_1, android.R.id.text1, userNotes.notes);
现在,在对象userNotes(来自UserNotes类)中,我有一些布尔值,并且基于true / false,我必须在每一行上设置strike标志。
我是使用onItemClick完成的,效果很好:
notes_container.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
TextView tv = (TextView) view.findViewById(android.R.id.text1);
int flags = tv.getPaintFlags();
flags &= Paint.STRIKE_THRU_TEXT_FLAG;
if (flags == 0)
tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
else
tv.setPaintFlags(tv.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG);
}
});
因此,每次用户点击项目点击标记时都会打开或关闭。
但是,首先我必须根据UserNotes类中的这些布尔字段进行初始化。 所以,我这样做了:
for(int i = 0; i < notes_container.getAdapter().getCount(); i++) {
View view = notes_container.getAdapter().getView(i, null, null);
TextView tv = (TextView) view.findViewById(android.R.id.text1);
if (userNotes.select.get(i).matches("True")) {
tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
}
else {
tv.setPaintFlags(tv.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG);
}
}
而且,它不起作用。好吧,如果我像这样放线:
tv.setText("CustomText");
在for循环开始并放置一些日志时,它看起来像这样:
for(int i = 0; i < notes_container.getAdapter().getCount(); i++) {
View view = notes_container.getAdapter().getView(i, null, null);
TextView tv = (TextView) view.findViewById(android.R.id.text1);
Log.d("MY_LOG_1",tv.getText().toString());
tv.setText("CustomText");
Log.d("MY_LOG_2",tv.getText().toString());
if (userNotes.select.get(i).matches("True")) {
tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
}
else {
tv.setPaintFlags(tv.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG);
}
}
我有logcat行:
D/MY_LOG_1﹕ TEXT_WHICH_WAS_HERE_BEFORE
D/MY_LOG_2﹕ CustomText
因此,我的代码会在特定字段中进行更改,但为什么我在屏幕上仍然会看到相同的文本? (在这个例子中是:&#34; TEXT_WHICH_WAS_HERE_BEFORE&#34;)
我尝试添加
adapter.notifyDataSetChanged();
但它没有做出任何改变......
如果有人能帮助我,我将非常感激;)
度过美好的一天!