我遇到了关于实现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);
}
}
现在我有一个问题!当我单击菜单按钮时,单击监听器没有动作。它没有打印日志消息和任何操作。所以,我有一个问题要做我的申请。它是否与生命周期有关或如何解决问题。
答案 0 :(得分:3)
我不喜欢你逼迫事物的方式,如果你想让它按照你setContentView(R.layout.activity_main);
移除MainActivity
的方式工作,那是因为你再次呼叫setContentView(R.layout.activity_main);
在sublcass中,将重新创建Activity
的视图层次结构,使您在超类中所做的事情无效
答案 1 :(得分:2)
代码正在设置内容视图两次。以下是您的代码序列。
setContentView()
Add button listener
setContentView()
声明#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;
}
}