android : 是否可以继承MainActivity class?
android : Is it possible to inherit from MainActivity class?
我一周前才开始学习 Java 和 Android Development
,我有一些我想知道的基本知识。
我的应用程序的功能是它有 10 个按钮,每个按钮在单击一次后都会被禁用。如果总共单击了 5 个按钮,则必须禁用所有按钮。
我没有使用按钮阵列,但我想知道为什么这不起作用。
(已完成所有必要的进口)
The MainActivity
class goes like this:
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
is this:
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();
}
}
and finally, Class2
goes like this:
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
class 的对象时总是会发生这种情况。
我什至尝试继承 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
的对象吗?
为什么我不能使用除 MainActivity
之外的另一个 class 的 findViewById
?
如何禁用Clickcount==5
之后的所有按钮?
您已经了解了我的编码方式。我需要遵循什么做法?还有其他建议可以改进我的编码方式吗?
提前感谢您的帮助!
您必须使用 (findViewByID(R.id.button) 初始化按钮并添加
setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){ // action}
});
您可以像这样创建 Class2 对象:
public Class2(MainActivity mainactivity){
this.mainobject =mainactivity;
}
然后在MainActivity的onCreate
Class2 class2=new Class2(MainActivity.this);
如果要在Class2中查找Button,可以使用
mainobject.getCurrentView().findviewByID()
您不能通过其构造函数实例化 Activity
class。所以你不能写MainActivity mainObject = new MainActivity()
。但是,即使可能,您仍然不想这样做,因为您将创建 MainActivity
的新实例,而您想对 existing[=] 中的按钮进行操作30=] MainActivity
.
解决此问题的一种方法是将您的 MainActivity
作为参数提供给您的方法或构造函数。即
class ClassTwo {
private MainActivity activity;
ClassTwo(MainActivity activity) {
this.activity = activity;
}
void disableAll() {
activity.btn1.setEnabled(false);
//etc...
}
}
虽然我个人认为在此处传递 Activity
有点矫枉过正,因为您只想对按钮进行操作。因此,您可以将按钮作为构造函数参数而不是 activity:
ClassTwo(Button[] btns) {
this.btns = btns;
}
或者,您可以传入 interface
。或者您可以考虑将 Button
作为方法中的参数提供,而不是将它们存储在实例变量中(我可能会这样做):
class ClassTwo {
ClassTwo(){} //Default, empty constructor
void disableAll(Button[] btns) {
for (Button btn : btns) {
btn.setEnabled(false);
}
}
}
我一周前才开始学习 Java 和 Android Development
,我有一些我想知道的基本知识。
我的应用程序的功能是它有 10 个按钮,每个按钮在单击一次后都会被禁用。如果总共单击了 5 个按钮,则必须禁用所有按钮。 我没有使用按钮阵列,但我想知道为什么这不起作用。 (已完成所有必要的进口)
The
MainActivity
class goes like this:
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
is this:
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();
}
}
and finally,
Class2
goes like this:
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
class 的对象时总是会发生这种情况。
我什至尝试继承 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
的对象吗?为什么我不能使用除
MainActivity
之外的另一个 class 的findViewById
?如何禁用
Clickcount==5
之后的所有按钮?您已经了解了我的编码方式。我需要遵循什么做法?还有其他建议可以改进我的编码方式吗?
提前感谢您的帮助!
您必须使用 (findViewByID(R.id.button) 初始化按钮并添加
setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){ // action}
});
您可以像这样创建 Class2 对象:
public Class2(MainActivity mainactivity){
this.mainobject =mainactivity;
}
然后在MainActivity的onCreate
Class2 class2=new Class2(MainActivity.this);
如果要在Class2中查找Button,可以使用
mainobject.getCurrentView().findviewByID()
您不能通过其构造函数实例化 Activity
class。所以你不能写MainActivity mainObject = new MainActivity()
。但是,即使可能,您仍然不想这样做,因为您将创建 MainActivity
的新实例,而您想对 existing[=] 中的按钮进行操作30=] MainActivity
.
解决此问题的一种方法是将您的 MainActivity
作为参数提供给您的方法或构造函数。即
class ClassTwo {
private MainActivity activity;
ClassTwo(MainActivity activity) {
this.activity = activity;
}
void disableAll() {
activity.btn1.setEnabled(false);
//etc...
}
}
虽然我个人认为在此处传递 Activity
有点矫枉过正,因为您只想对按钮进行操作。因此,您可以将按钮作为构造函数参数而不是 activity:
ClassTwo(Button[] btns) {
this.btns = btns;
}
或者,您可以传入 interface
。或者您可以考虑将 Button
作为方法中的参数提供,而不是将它们存储在实例变量中(我可能会这样做):
class ClassTwo {
ClassTwo(){} //Default, empty constructor
void disableAll(Button[] btns) {
for (Button btn : btns) {
btn.setEnabled(false);
}
}
}