Проблема с нулевой областью видимости Android findViewById

#android

#Android

Вопрос:

У меня возникли несколько проблем с тем, как я структурировал свое приложение. У меня есть обработчик щелчков в моем основном классе, который я решил, что хочу перенаправить в другой класс, чтобы сделать мой код меньше и более модульным, проблема внутри ButtonClass, findViewById всегда возвращает NULL, я полагаю, из-за того, что он выходит за рамки.

В моем файле XML-манифеста у меня есть: android: name =»com.prj.MyAppName»

В моем основном классе все работает нормально, но как только я создаю новый класс, я не могу использовать findViewById () внутри него.

Вот урезанная версия моего кода:

 public class Class1 extends Core
{
    Button buttonHint1 = (Button)findViewById(R.id.buttonHint1);
}

public class Core extends Activity
{
    public void myClickHandler(View target)
    {
        //THIS WORKS
        //TextView userText2 = (TextView) findViewById(R.id.textViewHint1);
        //userText2.setText( "OKOKOKO" );

        ButtonClass myButtonClass = new ButtonClass();
        myButtonClass.myClickHandler(target);
    }
}

public class ButtonClass extends Core
{
    public void myClickHandler(View target)
    {
        switch( target.getId() )
        {
            case R.id.buttonHint1:
                //CRASHES ON findViewById ()!!!
                TextView userText1 = (TextView) findViewById(R.id.textViewHint1);
                userText1.setText( "OKOKOKO" );
            break;
        }
    }
}
  

Кто-нибудь знает, есть ли какие-либо изменения, которые я могу внести, чтобы разрешить ButtonClass использовать findViewById и, возможно
исправьте мои проблемы с областью видимости, чтобы мое приложение не зависало?

Я все еще изучаю Android и был бы признателен за любой совет.

Комментарии:

1. Используете ли вы тот же макет в активности ButtonClass, что и в основной активности?

Ответ №1:

Почему бы не изменить конструктор ButtonClass, чтобы разрешить параметр (TextView)findViewById(R.id.textViewHint1)?

 public ButtonClass(TextView tv){
//constructor stuff
}
  

Если это вызывается в Activity, оно должно сработать.

Редактировать: моя ошибка, а не TextView, кнопка!

Комментарии:

1. » Есть ли более простой способ делать что-то? Причина, по которой я спрашиваю, в том, что у меня есть много кнопок, которыми мне нужно управлять для моего приложения (25 или около того). Мне пришлось бы модифицировать myClickHandler () в core с помощью оператора switch для всех моих кнопок и всего остального. Я надеялся сохранить свой код небольшим и чистым.

2. Действительно ли это сложнее, чем другим способом?

3. Для этого потребовался бы еще один цикл внутри моего Core::myClickHandler (), которого я надеялся избежать, поскольку это было причиной моего ButtonClass . В качестве последнего средства я пойду по этому пути.

4. Я занимался этим некоторое время, поэтому, думаю, я просто пойду по этому пути. Спасибо тебе за твою помощь, Джей Джей Джи.