在我的安卓应用程序中,我想解决以下情况。
class Login extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutBuilder objLB=new LayoutBuilder(this);
objLB.createSpinner();
}
public void spinnerItemSelectedEvent(AdapterView<?> parent, View view,
int pos, long id)
{
}
}
class LayoutBuilder {
private Activity objActivity;
public LayoutBuilder(Activity a) {
objActivity = a;
}
public void createSpinner() {
final Spinner objSPItem = new Spinner(objActivity);
objSPItem.setOnItemSelectedListener(
new Spinner.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id)
{
// Do some common activity
objActivity.spinnerItemSelectedEvent(parent,view,pos,id);
// calling this for do some additional task
}
public void onNothingSelected(AdapterView<?> arg0) {}
});
objActivity.spinnerItemSelectedEvent()
}
}
问题是当我尝试从createSpinner方法中的"onItemSelected"列表器访问微调器项目选定事件(父,视图,pos,id) 我收到以下错误。
方法微调器项选定侦听器(适配器视图,视图,整型,长整型)未为类型活动定义
但是在列表器之外,对该方法的访问工作正常(忽略参数列表)。这背后的原因是什么?是否有其他方法可以解决此问题?请帮忙
Android 中的活动代表一个屏幕。您正在创建一个类型为 Activity
的变量objActivity
,而它应该是声明函数 spinnerItemSelectedEvent()
的 Login
类型。更改以下行:
private Activity objActivity;
自
private Login objActivity;
并且您的代码应该运行。
编辑
有一个BaseActivity
,让你的所有其他活动扩展这个BaseActivity
。要使函数spinnerItemSelectedEvent()
可重用,请在BaseActivity
中声明它,您可以按照现在尝试的方式使用它。
例:
class BaseActivity extends Activity{
public void spinnerItemSelectedEvent(AdapterView<?> parent, View view,
int pos, long id){ }
}
class Login extends BaseActivity{
public void spinnerItemSelectedEvent(AdapterView<?> parent, View view,
int pos, long id){ //Local implementation of the function}
}
class LayoutBuilder {
private BaseActivity objActivity;
}
问题是在LayoutBuilder
内部,你已经声明objActivity
是一个Activity
。声明它是一个Login
,一切都应该没问题:
class LayoutBuilder {
private Login objActivity;
public LayoutBuilder(Login a) {
objActivity = a;
}
. . .
编辑
如果您希望 LayoutBuilder
类可由其他活动重用,则一种方法是通过接口声明。例如:
public interface SpinnerSelectionHandler {
void spinnerItemSelectedEvent(AdapterView<?> parent, View view,
int pos, long id);
}
然后将Login
声明为:
public class Login extends Activity implements SpinnerSelectionHandler {
. . .
最后,重新定义LayoutBuilder
以在其构造函数中采用SpinnerSelectionHandler
:
class LayoutBuilder {
private Activity objActivity;
private SpinnerSelectionHandler selectHandler;
public LayoutBuilder(Activity a, SpinnerSelectionHandler handler) {
objActivity = a;
selectHandler = handler;
}
然后更换
objActivity.spinnerItemSelectedEvent(parent,view,pos,id);
跟
spinnerHandler.spinnerItemSelectedEvent(parent,view,pos,id);
另外,如果您不需要其他任何Activity
引用,则可以将其从LayoutBuilder
类中删除。