2013-08-04 29 views
12

Tôi có một đoạn bao gồm một nút xoay và một nút. Bạn chọn một trong bốn tùy chọn với spinner và sau đó nút sẽ đưa bạn đến hoạt động tiếp theo.Triển khai nhiều trình xử lý sự kiện trong cùng một đoạn - Android

Để triển khai trình quay, tôi cần triển khai onItemSelectedListener trên Phân đoạn nhưng sử dụng nút tôi cần để triển khai onClickListener. Nhưng tôi không thể làm cả hai ??? Tôi đã mong đợi điều này là một điều thực sự đơn giản và cần phải có nhiều Trình xử lý sự kiện khác nhau trên một Chế độ xem phải là phổ biến, vậy làm cách nào để bạn triển khai tính năng này?

Đây là mã mà tôi đang sử dụng: -

public class FragmentTypeSelect kéo dài Fragment cụ 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); 
} 

}

Ban đầu tôi chỉ có spinner trong và nhận được này làm việc tốt. Sau đó, tôi đã cố gắng đưa vào chức năng nút với OnClickListener được đặt trong onCreateView và thêm các phương thức onClick và setUpClickListener bổ sung. Đây chính xác là cách tôi đã thực hiện nó ở nơi khác nhưng trong các trường hợp khác, tôi đã không có các sự kiện khác để xử lý và đã thực hiện lớp thực hiện onClickListener. Java không hỗ trợ nhiều giao diện thực hiện (như tôi hiểu nó) và do đó câu hỏi của tôi.

Hy vọng bạn có thể trợ giúp. Tôi có thể là một chút dày nhưng tôi vẫn còn khá mới cho toàn bộ OO cũng như Android.

+0

Bạn có thể làm cả hai. Hãy đăng mã của bạn và giải thích thêm về vấn đề của bạn. –

+0

Leo, tôi hiện đã đăng mã ở trên .... Cảm ơn – RobT

Trả lời

28

Bạn có thể làm:

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

Điều đó đã hiệu quả. Tôi đã thử điều này với một onClickListener thấp hơn là OnClickListener và sau đó khi tôi tìm kiếm một giải pháp ở khắp mọi nơi dường như nói rằng bạn không thể thực hiện nhiều giao diện được phân cách bằng dấu phẩy. Cảm ơn bạn đã làm rõ. – RobT

+0

Tôi cũng đã thấy rất nhiều, rằng trong java nó không thể thực hiện một số giao diện, nhưng dù sao là một thực hành tốt? Bạn có recommand theo cách này? – Xsmael

+1

@Xsmael Trong Java, bạn được phép thực hiện nhiều giao diện. Và có, tôi sẽ nói rằng đây là một thực hành hoàn toàn chấp nhận được. Ở đây bạn có thể sử dụng các lớp bên trong vô danh cho người nghe, nhưng đó chỉ là vấn đề về phong cách mã, hoặc là phong cách là tốt trong thực tế. –

Các vấn đề liên quan