2013-12-06 2 views
0

Написать стенд вдоль интерфейса или нет, как это,Что отличается от двух способов с интерфейсом?

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

Один прямо, другой с орудиями. который более стандартно написан? thannks – learner1

+1

это действительно вопрос предпочтения IMO, оба вполне приемлемы – tyczj

+1

Я использую первый, если есть только один 'Spinner', а второй с несколькими' Spinner 'then' switch' на 'parent'. Но да, просто предпочтение, они оба делают то же самое. – codeMagic

ответ

1

Что нового?

Первый вариант создает анонимный внутренний класс, который реализует интерфейс. Это полезно, когда вам нужно несколько версий OnItemSelectedListener, которые значительно отличаются.

Во втором варианте, ваша активность реализует OnItemSelectedListener, поэтому (при условии, что вы передаете this к каждому из вашего Спиннерса) каждый Spinner будет идти к той же OnItemSelectedListener инстанции.

который более стандартный письменный?

Это зависит от ваших личных предпочтений и вашего прецедента. Если все ваши Spinners имеют подобное поведение или достаточно простое поведение, то onItemSelected() будет коротким, то последний вариант будет работать нормально.

Однако, если каждый из ваших Spinners уникален и имеет общий общий код в onItemSelected(), то создание нового экземпляра OnItemSelectedListener для каждого Spinner может быть лучшим дизайнерским решением.

+0

Спасибо за прекрасный ответ. – learner1

1

Преимущество создания объекта реализации интерфейса заключается в том, что у вас будет один объект меньше для распределения и сбора. Но анонимная реализация не является большим недостатком. Как сказал tyczj, это действительно вопрос предпочтения. Если он делает что-то вроде срабатывания видимости, я бы сделал его анонимным, поэтому вам не нужно искать переопределенный метод в классе Activity.

+0

благодарю вас за дополнение. – learner1

1

Они оба эквивалентны, и, как говорит tyczj, это вопрос предпочтения. Причина, по которой иногда реализация интерфейса вместо создания анонимного внутреннего класса предпочтительна, например, если у вас есть несколько Buttons, из которых вы хотите получить свои события кликов. Если вы определяете анонимный внутренний класс для каждого из них, вы создаете дополнительные Objects. Но, как я уже говорил, оба шаблона функционально одинаковы.

+0

Спасибо за ваш пример. – learner1