代码之家  ›  专栏  ›  技术社区  ›  Prashanth Rebala

android:可以从MainActivity类继承吗?

  •  0
  • Prashanth Rebala  · 技术社区  · 9 年前

    我开始学习Java和 Android Development 就在一周前,我有一些基本的事情想知道。

    我的应用程序的功能是它有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
    
    }
    
    }
    

    如果我运行此程序,我的应用程序将启动,但会显示一个白色屏幕,应用程序将关闭。

    经过几次尝试,我意识到当我创建 主要活动 班 我甚至尝试继承 主要活动 但结果是一样的。

    我也试着改变 第2类 至:

    public class Class2 {
    
    public void disableAll(){
    
        Button b1 = (Button)findViewById(R.id.button1);
        b1.setEnabled(false);
    //Similarly for the other 9 buttons
    
    }
    
    }
    

    我注意到我不能用 findViewById

    1. 我们可以继承或创建 主要活动 ?

    2. 为什么我不能使用 按ID查找视图 除了 主要活动 ?

    3. 之后如何禁用所有按钮 Clickcount==5 ?

    4. 你已经看到了我的编码方式。我需要遵循哪些实践?还有其他建议可以让我的编码方式更好吗?

    提前感谢您的帮助!

    3 回复  |  直到 9 年前
        1
  •  1
  •   PPartisan    9 年前

    不能实例化 Activity 通过其构造函数初始化。所以你不会写 MainActivity mainObject = new MainActivity() 。尽管有可能,您仍然不想这样做,因为您将创建的新实例 MainActivity 现有的 主要活动 .

    解决这个问题的一个方法是 主要活动 作为一个参数,我既不是你的方法也不是构造函数。即。

    class ClassTwo {
    
        private MainActivity activity;
    
        ClassTwo(MainActivity activity) {
            this.activity = activity;
        }
    
        void disableAll() {
            activity.btn1.setEnabled(false);
            //etc...
        }
    
    }
    

    尽管我个人认为通过 当你只想按按钮操作时,这是一种过分的做法。因此,您可以将按钮作为构造函数参数而不是活动传递:

    ClassTwo(Button[] btns) {
        this.btns = btns;
    }
    

    或者,你可以通过 interface 。或者您可以考虑提供 Button s作为方法中的参数,而不是将它们存储在实例变量中(我可能会这样做):

    class ClassTwo {
    
        ClassTwo(){} //Default, empty constructor
    
        void disableAll(Button[] btns) {
            for (Button btn : btns) {
                btn.setEnabled(false);
            }
        }
    
    }
    
        2
  •  0
  •   Makaveli    9 年前

    setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v){ // action} 
    });
    
        3
  •  0
  •   OneCricketeer Gabriele Mariotti    9 年前

    可以这样创建Class2对象:

    public Class2(MainActivity mainactivity){
        this.mainobject =mainactivity;
    }
    

    然后在MainActivity的onCreate中

    Class2  class2=new Class2(MainActivity.this);
    

    当您想要在Class2中查找Button时,可以使用

    mainobject.getCurrentView().findviewByID()