在同一个片段中实现多个事件监听器 - Android

Posted

技术标签:

【中文标题】在同一个片段中实现多个事件监听器 - Android【英文标题】:Implement multiple event listeners in the same fragment - Android 【发布时间】:2013-08-05 14:10:24 【问题描述】:

我有一个由微调器和按钮组成的片段。您使用微调器选择四个选项之一,然后按钮将带您进入下一个活动。

为了实现微调器,我需要在 Fragment 上实现 onItemSelectedListener,但要使用按钮,我需要实现 onClickListener。 但我不能两者都做??? 我原以为这是一件非常简单的事情,并且在一个 View 上需要多个不同的事件侦听器的需求一定很常见,那么您如何实现呢?

这是我正在使用的代码:-

公共类 FragmentTypeSelect 扩展 Fragment 实现 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);

最初我只是将微调器放入并使其正常工作。然后我尝试在 onCreateView 中使用 set OnClickListener 放入按钮功能,并添加额外的 onClick 和 setUpClickListener 方法。 这正是我在其他地方所做的,但在其他情况下,我没有其他事件要处理,并且已经让类实现了 onClickListener。 Java 不支持多个接口实现(据我了解),因此是我的问题。

希望您能提供帮助。我可能有点厚,但我对整个 OO 以及 Android 还是很陌生。

【问题讨论】:

两者都可以。请发布您的代码,并详细说明您的问题。 Leo,我现在已经把上面的代码贴出来了……谢谢 【参考方案1】:

你可以这样做:

public class FragmentTypeSelect extends Fragment 
        implements OnItemSelectedListener, OnClickListener 

【讨论】:

效果很好。我用小写的 onClickListener 而不是 OnClickListener 尝试过这个,然后当我到处搜索解决方案时,似乎说你不能实现用逗号分隔的多个接口。感谢您的澄清。 我也见过很多,在java中不可能实现多个接口,但无论如何这是一个好习惯吗?你推荐这种方式吗? @Xsmael 在 Java 中,您可以实现多个接口。是的,我会说这是一种完全可以接受的做法。在这里,您也可以为侦听器使用匿名内部类,但这只是代码风格的问题,在实践中任何一种风格都可以。【参考方案2】:
   public class Home extends AppCompatActivity  implements ImageAdapter.OnItemClickListener ,Filterable 

然后单击红色灯泡并实施该方法。 可以通过用逗号分隔多个接口来完成多个接口的实现。

【讨论】:

以上是关于在同一个片段中实现多个事件监听器 - Android的主要内容,如果未能解决你的问题,请参考以下文章

在多个片段中的片段中实现选项卡

如何在全局侦听器中实现小吃吧?

Android 自定义Dialog类,并在Activity中实现按钮监听。

JQuery的on()监听方法使用

Android实现Button按钮点击事件监听的几种方式

RecyclerView onClickListener 适用于所有片段