#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. Я занимался этим некоторое время, поэтому, думаю, я просто пойду по этому пути. Спасибо тебе за твою помощь, Джей Джей Джи.