Android 在不单击的情况下更改ListView适配器中的TextView

Android 在不单击的情况下更改ListView适配器中的TextView,android,listview,textview,adapter,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); 在for循环的Begining并放置一些日志时,它如下所示: tv.setText

我有个恼人的问题。我已经为我的ListView创建了简单的ArrayAdapter

ArrayAdapter<String> adapter = new ArrayAdapter<>(InsideNotebookActivity.this, android.R.layout.simple_list_item_1, android.R.id.text1, userNotes.notes);
在for循环的Begining并放置一些日志时,它如下所示:

tv.setText("CustomText");
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);
        }
}
所以,我的代码在特定的字段中做了更改,但是为什么我在屏幕上看到的仍然是一次又一次的相同文本呢?(在这个例子中是:“TEXT\u之前在这里是什么?”

我试图补充

adapter.notifyDataSetChanged();
但是它没有做任何改变

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


祝你今天愉快

也许这个问题可以帮助你,我的答案解释了如何使用自定义适配器并重写“getView()”方法。我不确定,但我看不出这里的区别。我认为在我的解决方案中,通过调用.getAdapter().getView(position,null,null)可以获得正确的视图。这是正确的,因为TextView中的值很好。但是在我猜之后的某个地方有一个问题……您获得了正确的视图,但是您应该记住,ListView行就像您的数据出现在屏幕上时佩戴的一个掩码。您正在绘制面具,出于性能原因,面具将被回收。所以你一遍又一遍地得到同样的文本。简而言之:根据基础数据,必须在getView()方法中设置STRIKE_THRU_TEXT_标志(以及“unset”)。在OnClickListener中,您应该只更改基础数据,然后调用“notifyDatasetChanged()”。这将导致调用“getView()”。也许这个关于的问题可以帮助您,我在那里的回答解释了如何使用自定义适配器并重写“getView()”方法。我不确定,但我看不出这里的区别。我认为在我的解决方案中,通过调用.getAdapter().getView(position,null,null)可以获得正确的视图。这是正确的,因为TextView中的值很好。但是在我猜之后的某个地方有一个问题……您获得了正确的视图,但是您应该记住,ListView行就像您的数据出现在屏幕上时佩戴的一个掩码。您正在绘制面具,出于性能原因,面具将被回收。所以你一遍又一遍地得到同样的文本。简而言之:根据基础数据,必须在getView()方法中设置STRIKE_THRU_TEXT_标志(以及“unset”)。在OnClickListener中,您应该只更改基础数据,然后调用“notifyDatasetChanged()”。这将导致调用“getView()”。
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);
        }
}
D/MY_LOG_1﹕ TEXT_WHICH_WAS_HERE_BEFORE
D/MY_LOG_2﹕ CustomText
adapter.notifyDataSetChanged();