2013-08-04 27 views
12

Bir çeviriciden ve bir düğmeden oluşan bir parçam var. Spinner ile dört seçenekten birini seçersiniz ve ardından düğme sizi bir sonraki etkinliğe götürür.Aynı parçaya birden fazla olay dinleyicisi uygulayın - Android

Çeviriciyi uygulamak için, Parçada onItemSelectedListener uygulamasını, ancak onClickListener'ı uygulamak için kullanacağım düğmeyi kullanmam gerekir. Ama ikisini birden yapamam ??? Bunun gerçekten basit bir şey olmasını beklerdim ve bir Görüşte birden fazla farklı Olay dinleyicisine sahip olmanın gerekliliği ortak olmalı, bu yüzden bunu nasıl uygulayacaksınız?

public class FragmentTypeSelect Fragment uygular OnItemSelectedListener {

@Override 
public View onCreateView(LayoutInflater inflater, 
     ViewGroup container, Bundle savedInstanceState){ 

    // set the view so that it can be referenced 
    View theView = inflater.inflate(R.layout.fragment_type_select, 
      container,false); 

    // set OnClickListener for the button 
    setUpClickListener(theView,R.id.but_select); 


    //=============================== 
    // NEW TYPE SPINNER 
    //=============================== 

    Spinner spinner = (Spinner) theView.findViewById(R.id.new_type_spinner); 
    spinner.setOnItemSelectedListener((OnItemSelectedListener) this); 

    // Create an ArrayAdapter using the string array and a default spinner layout 
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(), 
      R.array.types_array, android.R.layout.simple_spinner_item); 

    // Specify the layout to use when the list of choices appears 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    // Apply the adapter to the spinner 
    spinner.setAdapter(adapter); 

    return theView; 

} 

public void onItemSelected(AdapterView<?> parent, View view, 
     int pos, long id) 
{ 

    TextView headingText = (TextView)getView().findViewById(R.id.new_diet_type_text_heading); 
    TextView detailText = (TextView)getView().findViewById(R.id.new_diet_type_text_detail); 

    if (pos == 0) 
    { 
     headingText.setText(R.string.heading_type_1); 
     detailText.setText(R.string.detail_type_1); 
    } 
    if (pos == 1) 
    { 
     headingText.setText(R.string.heading_type_2); 
     detailText.setText(R.string.detail_type_2); 
    } 
    if (pos == 2) 
    { 
     headingText.setText(R.string.heading_type_3); 
     detailText.setText(R.string.detail_type_3); 
    } 
    if (pos == 3) 
    { 
     headingText.setText(R.string.heading_type_4); 
     detailText.setText(R.string.detail_type_4); 
    } 

} 

@Override 
public void onNothingSelected(AdapterView<?> arg0) { 
    // TODO Auto-generated method stub 

} 



public void onClick(View view){ 

    Toast.makeText(getActivity(), "Clicked", Toast.LENGTH_LONG).show(); 
} 

private void setUpClickListener(View theView, int childViewID) { 
    View childView = theView.findViewById(childViewID); 
    childView.setOnClickListener((OnClickListener) this); 
} 

}

Başlangıçta

Ben sadece spinner vardı ve bu var uzatır: - İşte

kullanıyorum kodudur iyi çalışıyor. Daha sonra onCreateView setindeki set OnClickListener ile düğme işlevini eklemeye ve ek onClick ve setUpClickListener yöntemlerini eklemeye çalıştım. Tam olarak bunu başka bir yerde yaptım, ancak diğer durumlarda, işlemek için başka etkinliklerim olmadı ve sınıfın onClickListener uygulamasını gerçekleştirmesini sağladım. Java, birden fazla arabirim aracını desteklemiyor (bunu anladığım kadarıyla) ve bu nedenle benim sorum.

Yardım edersiniz. Muhtemelen biraz kalınım ama yine de Android'in yanı sıra tüm OO için de oldukça yeni.

+0

İkinizde yapabilirsiniz. Kodunuzu yayınlayın ve sorununuzu daha fazla açıklayın lütfen. –

+0

Leo, Yukarıdaki kodu yayınladım .... Teşekkürler – RobT

cevap

28

Sen yapabilirsiniz:

public class FragmentTypeSelect extends Fragment 
     implements OnItemSelectedListener, OnClickListener { 
+0

İyi çalıştı. Bunu, daha önce OnClickListener yerine ClickListener'da küçük bir denemeyle denedim ve sonra her yerde bir çözüm aradığımda, virgülle ayrılmış birden fazla arabirimi uygulayamayacağınızı söyleyebilirim. Açıklama için teşekkürler. – RobT

+0

Çok da gördüm, java'da çeşitli arayüzleri uygulamak mümkün değil, ama yine de bu iyi bir uygulama mı? Bu şekilde salık verir misin? – Xsmael

+1

@Xsmael Java'da çoklu arayüzleri uygulamanıza izin verilmektedir. Ve evet, bunun kesinlikle kabul edilebilir bir uygulama olduğunu söyleyebilirim. Burada dinleyiciler için anonim iç sınıflar da kullanabilirsiniz, ama bu sadece bir kod stili meselesi, ya pratikte iyi bir stil. –

İlgili konular