Java 更改具有相同标记/ID的多个文本视图中的文本

Java 更改具有相同标记/ID的多个文本视图中的文本,java,android,Java,Android,我有一个问题,试图设置多个文本视图与相同的文本时,它的变化。我有多个文本视图,需要使用相同的值进行设置。我一直在做的只是使用每个ID并独立设置每个ID的值,但这似乎不是很有效。基本上我正在做的是: ((TextView)findViewById(R.id.text_1_1)).setText("text 1"); ((TextView)findViewById(R.id.text_1_2)).setText("text 1"); ((TextView)findViewById(R.id.text

我有一个问题,试图设置多个文本视图与相同的文本时,它的变化。我有多个
文本视图
,需要使用相同的值进行设置。我一直在做的只是使用每个ID并独立设置每个ID的值,但这似乎不是很有效。基本上我正在做的是:

((TextView)findViewById(R.id.text_1_1)).setText("text 1");
((TextView)findViewById(R.id.text_1_2)).setText("text 1");
((TextView)findViewById(R.id.text_2_1)).setText("text 2");
((TextView)findViewById(R.id.text_2_2)).setText("text 2");
.....
((TextView)findViewById(R.id.text_5_1)).setText("text 5");
((TextView)findViewById(R.id.text_5_2)).setText("text 5");

我不希望将每个TextView作为全局变量存储在我的类中,因为它们太多了。有没有更好的方法或更简单的方法来实现这一点?

您可以使用标记对视图进行分组:只需对属于同一组的文本视图使用相同的标记(例如group1)。然后调用
fix(yourRootView,“group1”,“新值”)

受保护的无效修复(查看子项、字符串标签、字符串值){
if(child==null)
返回;
if(视图组的子实例){
固定((视图组)子对象,标记,值);
}
else if(TextView的子实例){
doFix((TextView)子级,标签,值);
}
}
私有无效修复(视图组父级、字符串标记、字符串值){
对于(int i=0;i
对于如此多的视图(10个),除了使用最方便的方法进行分组之外,我认为任何事情都不值得付出努力。如果有更多的视图,您可以使用反射。您是否尝试使用ListView或相同的视图?当您有大量这样的视图时,您应该想知道您是否可以通过某种AdapterView(即ListView、GridView等)更好地实现您的目标。答案几乎总是肯定的。如果没有更多的背景来说明你想要实现什么,尽管我不能真正为你指出一个更具体的方向。至少你应该保留对文本视图的引用
findViewById()
是一种相对昂贵的调用方法。每次需要更改文本时调用它都会降低性能。看起来文本视图的组织方式类似于2d数组。您可以创建一个全局二维数组(或ArrayList)来表示所有文本视图。这并不比你现有的更有效,但它看起来和感觉都更干净。@FoamyGuy:谢谢你的建议。我想我不是很清楚我目前的设置上面。根据应用程序的当前状态,我有几个隐藏或可见的布局部分。其中一些部分具有相同的信息、相同的文本但样式不同。我希望有一个更好的方法,然后只是迭代每个TextView来设置值。我不确定适配器是否能工作,因为它们位于不同的布局中。我也有超过10个视图,所以我不确定限制是什么:)谢谢,这正是我想要的。我试过类似的方法,但没能完全正确。
    protected void fix(View child, String thetag, String value) {
        if (child == null)
            return;

        if (child instanceof ViewGroup) {
            fix((ViewGroup) child, thetag, value);
        }
        else if (child instanceof TextView) {
            doFix((TextView) child, thetag, value);
        }
    }

    private void fix(ViewGroup parent, String thetag, String value) {
        for (int i = 0; i < parent.getChildCount(); i++) {
            fix(parent.getChildAt(i), thetag, value);
        }
    }
    private void doFix(TextView child, String thetag, String value) {
        if(child.getTag()!=null && child.getTag().getClass() == String.class) {
            String tag= (String) child.getTag();
            if(tag.equals(thetag)) {
                child.setText(value);
            }
        }
    }