在没有onItemClick的情况下更改ListView适配器中的TextView

时间:2015-12-16 15:15:50

标签: android listview textview adapter

我有烦人的问题。我为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();

但它没有做出任何改变......

如果有人能帮助我,我将非常感激;)

度过美好的一天!

0 个答案:

没有答案