我有一个包含大量代码/数据的主要活动类。所以我想让它简短易读,所以我想创建一个 .java 文件来根据要求处理一些功能。喜欢
Button b=(Button)findviewById(R.id.b1);
b.setOnClickListener(this);
并展示非活动课上的祝酒词。所以我的问题是如何在非活动中处理/初始化按钮?我们可以从将上下文从活动传递到非活动类中获取 id 吗?
试试这对我有用。也可以帮到你!
非活动类:
public class NonActivityClass {
Context context;
View v;
public NonActivityClass(Context context, View v) {
this.context = context;
this.v = v;
}
public void test() {
Button btn = (Button) v.findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(context, "Hello I am inside Non Activity Class",
1).show();
}
});
}
}
主要活动:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View v = getLayoutInflater().inflate(R.layout.activity_main, null);
setContentView(v);
NonActivityClass nac = new NonActivityClass(MainActivity.this, v);
nac.test();
}
}
是的,您可以通过在其他 java 类中实现 OnClickListener 并在您的活动类中调用它来做到这一点,就像这样
Button b=(Button)findviewById(R.id.b1);
b.setOnClickListener(new NonActivityClass(this));
我们将活动上下文传递给 NonActivityClass 这将使您在 NonActivityClass 中访问您的 UI 组件,但请记住这可能会导致内存泄漏;
并像这样实现 OnClickListener:
public class NonActivityClass implements OnClickListener
{
void onClick(View oView)
{
// Do your stuff here
}
}
您可以在主类中实现 onclick 侦听器,但使用接口将侦听器的内容外部化到其他类中。
例子:
创建一个包含构造函数、几个方法和对象的类 ManageClick.java。
一个属性
public OnClickListenerCustom _onClickListenerCustom;
还有一个界面
Interface OnClickListenerCustom{
public void onclick();
public void onItemClick();
}
还有另一种方法,例如 setOnClickListenerCustom :
public void setOnClickListenerCustom(OnClickListenerCustom listener){
this._onClickListenerCustom = listener;
}
在您的主类 MainActivity.java 中实现 onclick() 方法,在 oncreate 中设置监听器:
public ManageClick _clickManager;
_clickManager = new ManageClick();
_clickManager.setOnClickListener((OnClickListenerCustom) this.MainActivity);
要完成 onclick 方法,您只需要调用
_clickManager.onClick() or _clickManager.onItemClick()