Android 动态更改ListView中所有项目的文本颜色

Android 动态更改ListView中所有项目的文本颜色,android,listview,android-theme,Android,Listview,Android Theme,我想在不重新创建活动的情况下动态更改我的活动主题,我找到的唯一解决方案是在适当的位置更改项目属性(如背景、文本颜色),但我有一个带有项目数的ListView, 我可以反复浏览列表视图中的所有项目并更改文本颜色,但我认为这是一个相当糟糕的解决方案。 有没有更好的方法来实现这一点 提前感谢您您可以对ListView行使用自己的布局,这样您就可以在布局文件上指定文本颜色。我假设您有自定义的对象数组列表,在该列表上放置一个私有的int颜色 class myobject { private int

我想在不重新创建活动的情况下动态更改我的活动主题,我找到的唯一解决方案是在适当的位置更改项目属性(如背景、文本颜色),但我有一个带有项目数的
ListView
, 我可以反复浏览
列表视图中的所有项目
并更改
文本颜色
,但我认为这是一个相当糟糕的解决方案。
有没有更好的方法来实现这一点


提前感谢您

您可以对ListView行使用自己的布局,这样您就可以在布局文件上指定文本颜色。

我假设您有自定义的对象数组列表,在该列表上放置一个私有的int颜色

class myobject {
    private int color;
    public void setColor(int color) { this.color=color; }
    public int getColor { return color; }
}
在getView()集中的自定义ArrayAdapter列表上

当你只想改变颜色时,在你的onClick按钮上点击黑色

onClick() {
    for(int i=0;i<arraylist.size();i++) { arraylist.get(i).setColor(Color.Black); }
    arrayadapter.notifydatachange();
}
onClick(){

对于(int i=0;i您可以在适配器
getView()
方法中执行类似操作:

int theme = getThemeColorFromPrefrences();

if(theme == darkTheme){
   textView.setTextColor(...);
}
else{...}
现在,每当用户更改颜色时,只需在
列表视图上调用
invalidateViews()

// set other theme color [...]
myListView.invalidateViews()

谢谢你的回答,但我有自己的自定义行布局,我的问题是其他的!我想动态更改行文本的颜色。假设我有两个按钮,黑色和白色,当我按下黑色/白色时,我想将所有列表项的颜色更改为back/白色。谢谢,但是getView()已经为可见项调用了,它无法帮助更改可见项文本颜色。您不必调用它,只需根据需要声明getView,然后当您调用notifydatachange()时,android将发挥神奇的作用
// set other theme color [...]
myListView.invalidateViews()