Поиск Textview, который создан программно - PullRequest
0 голосов
/ 08 марта 2011

Я добавляю TextViews программно, используя цикл for, и использую setId (Int int) для установки уникального идентификатора для этого perticular Textview. Но теперь я хочу искать textView на основе этого идентификатора. Как я могу искать?

Произошла ошибка 'приложение неожиданно остановилось ...' Вот мой код.

public class Idtest extends Activity {
    TextView tv;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LinearLayout ll=new LinearLayout(this);
        tv=new TextView(this);

        tv.setText("Hello");
        ll.addView(tv);

        tv=new TextView(this);
        tv=(TextView)ll.getChildAt(1);

        setContentView(tv);


    }
}

Ответы [ 3 ]

2 голосов
/ 08 марта 2011

tv, очевидно, равен null в конце (у LinearLayout есть только один дочерний элемент с индексом 0), так что вы в основном вызываете setContentView(null), что приводит к исключению. Мне не ясно, что вы пытаетесь сделать (ваш код довольно испорчен).

Предположим, вы пытаетесь показать несколько TextView с в LinearLayout, вот мое предложение:

public class Idtest extends Activity {
    LinearLayout mainLayout;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mainLayout = new LinearLayout(this);
        setContentView(mainLayout);

        for (int i=0; i < 10; i++) {
            TextView tv = new TextView(this);
            tv.setText("Hello " + i);
            mainLayout.addView(tv);
        }
    }
}

Если в любой последующий момент вам понадобится один из TextView s, выполните:

TextView tvX = mainLayout.getChildAt(X); // where X is between 0 and 9

Также обратите внимание, что создание макета из кода - это зло. Если вы можете избежать этого, пожалуйста. Например, если число TextView s является динамическим, тогда совершенно нормально создавать их из кода (хотя вы могли бы их раздуть). Однако не рекомендуется также создавать LinearLayout из кода. Вы должны иметь это в XML. Если у вас есть возможность иметь TextView в XML, это было бы еще лучше.

1 голос
/ 08 марта 2011

Полагаю, вы добавляете свои элементы управления TextView в какую-либо ViewGroup (например, LInearLayout)?

Вы можете перебирать дочерние представления ViewGroup с помощью getChildCount () / getChildAt (index) и сравнивать идентификатор дочернего представления стот, который вы ищете.

1 голос
/ 08 марта 2011

Есть и другая опция ... у нас есть методы setTag() и getTag().При добавлении textview укажите для него тег, и всякий раз, когда вы хотите выполнить поиск, используйте getTag ().

...