android继承活动(Base - Main activity)

时间:2014-03-11 09:40:43

标签: android

我遇到了关于实现Android应用程序的问题。 我创建了baseActivity,它是其他应用程序和其他应用程序的基础。

这些是我的代码。

首先,BaseActivity.java

public class BaseActivity extends Activity {

    protected void onCreate(Bundle savedInstanceState,int layoutId) {
        super.onCreate(savedInstanceState);
        setContentView(layoutId);

        Button menuBtn = (Button)findViewById(R.id.menuBtn);
        menuBtn.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Log.d("bss","menu");
            }   
        }); 
    }
}

另一个是MainActivity.java

public class MainActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState,R.layout.activity_main);
        setContentView(R.layout.activity_main);

    }
}

现在我有一个问题!当我单击菜单按钮时,单击监听器没有动作。它没有打印日志消息和任何操作。所以,我有一个问题要做我的申请。它是否与生命周期有关或如何解决问题。

4 个答案:

答案 0 :(得分:3)

我不喜欢你逼迫事物的方式,如果你想让它按照你setContentView(R.layout.activity_main);移除MainActivity的方式工作,那是因为你再次呼叫setContentView(R.layout.activity_main);在sublcass中,将重新创建Activity的视图层次结构,使您在超类中所做的事情无效

答案 1 :(得分:2)

代码正在设置内容视图两次。以下是您的代码序列。

  1. setContentView()
  2. Add button listener
  3. setContentView()
  4. 声明#2,添加按钮监听器,直到现在都是好的。但是,只要在语句#3上重置内容视图,之前的设置就会失效。然后按钮重新初始化,onClickListener不再附加到按钮上。

答案 2 :(得分:1)

从BaseActivity中删除contentview并放入

  Button menuBtn = (Button)findViewById(R.id.menuBtn);
        menuBtn.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Log.d("bss","menu");
            }   
        }); 

进入MainActivity。 Base活动应该是SuperClass,MainActivity子类将视图shold的所有动作初始化为子类。

答案 3 :(得分:1)

试试这个:

public class BaseActivity extends Activity {

            protected void onCreate(Bundle savedInstanceState,int layoutId) {
                super.onCreate(savedInstanceState);



            }

         public int getLayoutXML() {
            return -1;
        }

        public abstract int getMenuId();
        }

在此之后使用此BaseActivity类如下:

public class service_detail extends BaseActivity {

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

           //  Use button like this:
Button menuBtn = (Button)findViewById(R.id.menuBtn);
        menuBtn.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Log.d("bss","menu");
            }   
        }); 

}

    @Override
        public int getMenuId() {
            // TODO Auto-generated method stub
            return 1;
        }

        @Override
        public int getLayoutXML() {
            // TODO Auto-generated method stub
            return R.layout.service_detail;
        }

}