Общий доступ к TextView - PullRequest
3 голосов
/ 27 июня 2011

У меня есть активность Android с восемью TextViews, названная 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, написать заявление о переключении не так уж и сложно, но я думаю, что должен быть лучший способ.Есть идеи?

Ответы [ 2 ]

3 голосов
/ 27 июня 2011

Вы можете использовать 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 s:

@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);
    }

}

enter image description here

0 голосов
/ 27 июня 2011

Вы можете получить доступ к ресурсам по имени во время выполнения, см. Пример здесь .

С уважением, Stéphane

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...