如何处理片段中的onClick [重复]

Posted

技术标签:

【中文标题】如何处理片段中的onClick [重复]【英文标题】:How to Handle onClick in Fragments [duplicate] 【发布时间】:2016-06-02 17:08:43 【问题描述】:

这是我第一次尝试 Fragments,但我无法处理 android:onClick

我的片段 XML 中有一个按钮,如下所示

    <Button
        android:layout_
        android:layout_
        android:text="@string/save_keywords_button"
        android:id="@+id/save_keywords"
        android:layout_marginTop="340dp"
        android:background="#FF2E7D32"
        android:textColor="#FFFFFF"
        android:typeface="normal"
        android:onClick="myLogic" />

我搜索了很多结果,无法找到处理 onClick 事件的确切解决方案。

我的问题是,如何获取按钮的 ID 并编写 myLogic 方法。 FindViewById() 不能在片段中工作,我应该在哪里编写该方法? 在片段或我的活动中?

【问题讨论】:

访问此链接developer.android.com/tools/data-binding/… 【参考方案1】:

更好的方法是在片段类中实现OnClickListener,并在片段中覆盖onCreateView,在片段中将侦听器分配给按钮。

通过在 XML 布局中添加 onClick 属性,加载时您的活动将在活动中查找元素,而不是在片段中。这将引发异常。

我建议阅读一些片段活动层次结构,以了解何时可以访问片段中的元素。

public class StartFragment extends Fragment implements OnClickListener

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

    View v = inflater.inflate(R.layout.fragment_start, container, false);

    Button b = (Button) v.findViewById(R.id.save_keywords);
    b.setOnClickListener(this);
    return v;


@Override
public void onClick(View v) 
    switch (v.getId()) 
    case R.id.save_keywords:

        ...

        break;
    


参考来自:here

【讨论】:

【参考方案2】:

android:onClick="myLogic" 不会在片段内调用方法myLogic。请改用OnClickListener 来处理此类事件。

请参阅以下参考资料

Best way to implement View.OnClickListener in android

http://developer.android.com/reference/android/view/View.OnClickListener.html

【讨论】:

【参考方案3】:

如果您需要在 fragmen 中查看视图,您只能在调用 onCreateView() 后执行此操作 getView().findViewById(R.id.foo);。如果您在 xml 中指定 onClick,则无需在程序中编写任何指向该方法的链接,只需在您的活动中实现该方法即可。

【讨论】:

如您所说,我在主 Activity 中编写了一个方法“public void myLogic(View v)”,但是当我单击按钮 java.lang.IllegalStateException: 找不到方法 myLogic 时出现此错误(视图)在视图类 android.support.v7.widget.AppCompatButton 上定义的 android:onClick 属性的父或祖先上下文中,id 为“save_keywords” @Uday 我们需要您的片段和活动的代码来查看问题所在。手动设置 onclick 监听器是个好主意。如果你在代码中拼错了你的方法名,它不会被调用。【参考方案4】:

尝试添加方法

public void myLogic(View v)

【讨论】:

将其添加到我的 mainActivity 中,并在点击按钮时出现此错误 无法在视图类 android.support.v7 上定义的 android:onClick 属性的父上下文或祖先上下文中找到方法 myLogic(View)。 id 为“save_keywords”的 widget.AppCompatButton

以上是关于如何处理片段中的onClick [重复]的主要内容,如果未能解决你的问题,请参考以下文章

消息队列如何处理重复消息

自然模板(例如Thymeleaf)时如何处理代码重复?

如何处理片段上的触摸事件?

片段如何处理触摸?

在片段之间切换时如何处理相机?

Java:如何处理 servlet 中的多个会话 [重复]