沿着界面写一个或不是这样的,
spinner.setAdapter(this.mAdapter);
OnItemSelectedListener spinnerListener = new OnItemSelectedListener(this,this.mAdapter);
spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) {
// TODO Auto-generated method stub
Toast.makeText(parent.getContext(),"The planet is "+ parent.getItemAtPosition(pos).toString(),Toast.LENGTH_LONG).show();
textViewa.setText("You choose :"+ " " + mAdapter.getItem(arg2));
arg0.setVisibility(View.VISIBLE);
}
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
textViewa.setText("NONE");
arg0.setVisibility(View.VISIBLE);
}
});
和这一个,
public class SpinnerActivity extends Activity implements OnItemSelectedListener { ...
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { // An item was selected. You can retrieve the selected item using // parent.getItemAtPosition(pos) } public void onNothingSelected(AdapterView<?> parent) { // Another interface callback } }
有什么不同?
答案 0 :(得分:1)
有什么不同?
第一个选项创建一个实现接口的匿名内部类。当您需要多个显着不同的OnItemSelectedListener
实现时,这非常有用。
在第二个选项中,您的Activity实现OnItemSelectedListener
,因此(假设您将this
传递给每个Spinners),每个Spinner将转到相同的OnItemSelectedListener
实例。
这是更标准的写作?
这取决于您的个人偏好和您的使用案例。
如果你的所有Spinners都有类似的行为或简单的行为onItemSelected()
将会很短,那么后一种选择就可以了。
但是,如果您的每个Spinner都非常独特并且在onItemSelected()
中共享很少的公共代码,那么为每个Spinner创建一个新的OnItemSelectedListener
实例可能是一个更好的设计决策。
答案 1 :(得分:1)
使Activity实现一个接口的好处是你将有一个较少的对象来分配和收集。但匿名实施并不是一个很大的缺点。 正如tyczj所说,这确实是一个偏好问题。如果它确实触发可见性,我会将其设为匿名,这样您就不必在Activity类中搜索重写的方法。
答案 2 :(得分:1)
它们都是等价的,就像tyczj所说的那样,这是一个偏好问题。有时实现界面而不是创建匿名内部类的原因是首选,例如,如果您有多个Buttons
,您希望从中获取其点击事件。如果为每个人定义匿名内部类,则需要创建额外的Objects
。但正如我之前所说,这两种模式在功能上是相同的。