Я начал изучать Java и Android Development
всего неделю назад, и у меня есть пара основных вещей, которые я хотел бы знать.android: Можно ли наследовать класс MainActivity?
Функционирование моего приложения состоит в том, что у него есть 10 кнопок, и каждый из них отключен после того, как он был нажат один раз. Если нажата всего 5 кнопок, все кнопки должны быть отключены. Я не использовал массив кнопок, но я хочу знать, почему это не работает. (все необходимые импорта были сделаны)
MainActivity
класс выглядит следующим образом:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
StartText();
}
Class1 c1object = new Class1();
TextView textobj;
Button Button1,Button2,Button3,Button4 /* similarly for the other 6 buttons*/ ;
public void StartText(){
textobj = (TextView)findViewById(R.id.textView);
textobj.setText("No Button has been clicked");
}
public void Click1(View view)
{
Button1 = (Button)findViewById(R.id.button1);
c1object.disablebutton(Button1,textobj,1);
}
public void Click2(View view)
{
Button2 = (Button)findViewById(R.id.button2);
c1object.disablebutton(Button2,textobj,2);
}
public void Click3(View view)
{
Button3 = (Button)findViewById(R.id.button3);
c1object.disablebutton(Button3,textobj,3);
}
public void Click4(View view)
{
Button4 = (Button)findViewById(R.id.button4);
c1object.disablebutton(Button4,textobj,4);
}
// Similarly for 6 more buttons
}
Class1
это:
public class Class1 {
Class2 c2object = new Class2();
private int Clickcount=0;
public void disablebutton(Button b, TextView t, int i) {
b.setEnabled(false);
String str = Integer.toString(i);
t.setText("You clicked button: " + str);
Clickcount++;
if(Clickcount==5)
c2object.disableAll();
}
}
и, наконец,
Class2
выглядит следующим образом:
public class Class2 {
MainActivity mainobject = new MainActivity();
public void disableAll(){
mainobject.Button1.setEnabled(false);
mainobject.Button2.setEnabled(false);
mainobject.Button3.setEnabled(false);
mainobject.Button4.setEnabled(false);
//Similarly for the other 6 buttons
}
}
Если я запускаю это мое приложение пуски, но белый экран отображается, и приложение закрывается.
После нескольких попыток я понял, что это всегда происходит, когда я создал объект класса MainActivity
. Я даже попробовал наследовать MainActivity
, но результат был тот же.
Я также попытался изменить Class2
к этому:
public class Class2 {
public void disableAll(){
Button b1 = (Button)findViewById(R.id.button1);
b1.setEnabled(false);
//Similarly for the other 9 buttons
}
}
я заметил, что я не могу использовать findViewById
здесь.
Это те вещи, которые я хотел бы знать:
Можно ли наследовать от или создать объект
MainActivity
?Почему я не могу использовать
findViewById
из другого класса, кромеMainActivity
?Что делать, чтобы отключить все кнопки после
Clickcount==5
?Вы видели мой способ кодирования. Любые методы, которым я должен следовать? Любые другие предложения, чтобы лучше сделать мой способ кодирования?
Благодарим за помощь!
Для отключения кнопки есть, если заявление, где if (Clickcount == 5) {myButton.setEnabled (false); } и сделайте это на столько кнопок, сколько вам нужно. Также я бы не рекомендовал структурировать ваш код вокруг создания экземпляров класса MainActivity. Если вам нужно создать экземпляры объекта, создайте для этого еще один класс. Однако я не уверен в части findViewById. – Michael
Это в значительной степени то, что я сделал. Проблема в том, что я не могу получить доступ к myButton из этого класса, не создавая объект MainActivity. Но делать это приводит к сбою моего приложения. –
Вы можете попробовать сделать MainActivity static и поместить весь код кнопки отключения в статическом методе в MainActivity. Просто вам не нужно создавать экземпляр. Какие ошибки вы получаете, когда он падает? – Michael