如何通过其在android中的id访问TextView?

时间:2016-01-21 21:35:21

标签: java android textview

例如我有10个Textiews,名称为text1到text11。我把它们投下如下:

    TextView text1=(TextView) findViewByid(R.id.textview1);

为遗体做这件事。现在在某个地方我想调用它们并在for循环中为它们设置文本,例如当i = 1 text1.settext完成时,当i = 2 text2.settext完成时......如下所示:

    for(int i=1;i<=11;i++){
        text(i).SetText("some text");
    }

怎么办?

感谢

7 个答案:

答案 0 :(得分:2)

尝试使用文字视图填充ArrayList

ArrayList<TextView> myTextViews = new ArrayList<TextView>();

myTextViews.Add((TextView) findViewByid(R.id.textview1));
myTextViews.Add((TextView) findViewByid(R.id.textview2));
.
.
.
 for(int i=1;i<=11;i++){
    myTextViews.get(i).SetText("some text");
}

答案 1 :(得分:2)

另一种方法是使用java生成文本视图:

 LinearLayout ll = (LinearLayout) findViewById(R.id.llexample);
for(int i=1;i<=11;i++){
    TextView tv = new TextView(this);  //create Text View
    tv.setId(i);                       //then set the id to i
    ll.addView(tv);                    //add TV to example Layout
}

然后当你想要检索它们时,只需执行另一个for循环:

for(int i=1;i<=11;i++){
  TextView t = (TextView) findViewById(i); //get the TV by the id we set earlier
  String text = t.getText().toString(); //get the text then to string it.
}

答案 2 :(得分:1)

只需使用数组来保存TextViews:

TextView[] text = {(TextView) findViewByid(R.id.textview1), ...}

然后在循环中使用它:

for(int i=1;i<=11;i++){
        text[i].SetText("some text");
    }

答案 3 :(得分:0)

使用ButterKnife库:

@Bind({ R.id.first_name, R.id.middle_name, R.id.last_name })
List<EditText> nameViews;

然后你可以通过这样设置你自己的逻辑

static final ButterKnife.Action<View> DISABLE = new ButterKnife.Action<View>() {
  @Override public void apply(View view, int index) {
    view.setEnabled(false);
  }
};

ButterKnife.apply(nameViews, DISABLE);

答案 4 :(得分:0)

您可以使用此方法获取资源ID的值:

public static int getResourceId(String pVariableName, String pResourcename, String pPackageName) {
    try {
        return getResources().getIdentifier(pVariableName, pResourcename, pPackageName);
    } catch (Exception e) {
        return -1;
    } 
}

然后你的代码看起来像:

for(int i=1;i<=11;i++){
    TextView textView = (TextView)findViewById(getResourceId("textview" + i, "id", getPackageName());
    textView.setText("some text");
}

值得注意的是,这不是一个真正推荐的做法,因为它容易出错。你真的不知道&#34; textview1&#34;如果您更改了该名称,则可能会失败。如果你能给我一些关于你的用例的更多信息,我可以给你一个更优雅的解决方案。

答案 5 :(得分:0)

我说像大家一样的阵列,只有一个转折。

int ids[] ={R.id.text1, R.id.text2, ...};
TextView views[] = new TextView[ids.length];
int i=0;
for(int id : ids) {
   views[i++] = (TextView)findViewById(id);
}

将ID保存在数组中可以轻松查找视图,而不是复制粘贴大量代码。

答案 6 :(得分:0)

我还没有测试过它。但你可以试试这样的东西

public setAllText() {
    int[] textViews = { R.id.text1, R.id.text2, R.id.text3, R.id.text4 };
    setTextForViews(textViews,"some text");
}

private void setTextForViews(int[] textViews, String textString) {
    for (int i = 0; i < textViews.length; i++) {
        TextView text = (TextView) getActivity().findViewById(textViews[i]);
        text.setText(textString);
    }

}