我有一个带有八个TextView的Android活动,名为tvStat1,tvStat2,...,tvStat8。我有一个函数,它以整数作为参数。我想做的是这样的事情:
public void incrementScore(int StatisticCategory){
String s "R.id.tvStat" + String.ValueOf(StatisticCategory);
TextView tvGeneric = (TextView)findViewById(s);
// ... do something with the text in the generic TextView...
}
但是,当然,这不起作用,因为findViewById方法只接受一个整数作为参数,因此不喜欢我根据传入参数识别通用TextView的方式。由于我只有八个TextView,所以写一个switch语句并不是太费劲......但我认为必须有更好的方法。有什么想法吗?
答案 0 :(得分:3)
您可以使用ViewGroup.getChildCount()
和ViewGroup.getChildAt()
。这是一个例子。
假设你有布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
android:id="@+id/text_group"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
您可以使用下一代码将文字分配给TextView
:
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LinearLayout textGroup = (LinearLayout)findViewById(R.id.text_group);
for(int i = 0; i < textGroup.getChildCount(); i++)
{
TextView text = (TextView)textGroup.getChildAt(i);
text.setText("This is child #"+i);
}
答案 1 :(得分:0)
您可以在运行时按名称访问资源,请参阅示例here。
此致 斯特凡