Работа с динамическими элементами из нестандартного адаптера - PullRequest
0 голосов
/ 19 августа 2011

Привет, это мой первый вопрос в стеке. Я создаю динамическую сетку этого урока http://www.stealthcopter.com/blog/2010/09/android-creating-a-custom-adapter-for-gridview-buttonadapter/comment-page-1/

Теперь это работает довольно хорошо. Мой макет состоит из gridView, и под этим gridView у меня есть TextView.

Проблема в том, что я хочу изменить TextView для отображения различной информации по каждому идентификатору при изменении фокуса (на элементах сетки). Я пытался использовать OnFocusChangeListener внутри ButtonAdapter, но при попытке получить ссылку на textView он говорит, что findViewById не реализован.

Интересно, как сделать ссылку в моей основной деятельности, которая позволяет мне обрабатывать мои элементы динамической сетки. У меня есть следующее в onCreate ();

    GridView gridview = (GridView) findViewById(R.id.gridview);
    gridview.setAdapter(new ButtonAdapter(this));

Итак, я хочу обработать свои элементы сетки отсюда, есть идеи? Спасибо

Edit: Я пытался изменить разные вещи, но я получаю исключение NullPointerException из моего метода getView. Я не могу найти способ заставить это работать, я буду признателен за любую помощь, ребята, это мой код:

    public View getView(int position, View convertView, ViewGroup parent) {
    final Button btn;
    if (convertView == null) {
        // if it's not recycled, initialize some attributes
        btn = new Button(mContext);
        btn.setLayoutParams(new GridView.LayoutParams(100, 55));
        btn.setPadding(8, 8, 8, 8);
    } else {
        btn = (Button) convertView;
    }

    btn.setText(filenames[position]);
    // filenames is an array of strings
    btn.setTextColor(Color.WHITE);
    btn.setId(position);
    btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            TextView vt = (TextView) btn.findViewById(R.id.textView1);
            vt.setText("Button Pressed");
        }
    });

Спасибо.

1 Ответ

0 голосов
/ 19 августа 2011

Я думаю, что вы на правильном пути, но я думаю, что было бы разумнее позаботиться об этом в вашем адаптере. Так что findViewById () не работает для вас, но он будет работать, если вы измените его на convertView.findViewById () (или любой другой вид, возвращаемый в вашем методе getView вашего Адаптера). Оттуда вы сможете манипулировать TextView.

...