如何在Fragment中处理onClick事件

16

这是我第一次尝试使用片段(Fragments),但我无法处理android:onClick。

我在我的片段XML文件中有一个按钮,像这样:

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        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() 在片段中不起作用,在哪里应该编写该方法? 在片段中还是在我的活动中?


1
请访问此链接 https://developer.android.com/tools/data-binding/guide.html#binding_events - USKMobility
4个回答

29
更好的方法是在您的片段类中实现 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;
    }
}
}

来源参考: 这里


3

1
如果您需要在fragment中获取视图,可以在onCreateView()被调用后使用getView().findViewById(R.id.foo);。如果您在xml中指定了onClick,则无需在程序中编写任何与该方法的链接,只需在您的活动中实现该方法即可。请注意保留html标签。

正如你所说,我在主Activity中编写了一个方法“public void myLogic(View v)”,但是当我点击按钮时,出现了以下错误: java.lang.IllegalStateException: Could not find method myLogic(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'save_keywords' - Uday
@Uday,我们需要查看你的片段和活动代码以确定问题在哪里。手动设置onclick监听器是一个好主意。如果你在代码中拼写错误了方法名,它将无法被调用。 - callOfCode

0
尝试添加方法。
public void myLogic(View v)

1
在我的mainActivity中添加了它,但在点击按钮时出现了以下错误:无法找到myLogic(View)方法的父级或祖先上下文,该方法已在视图类android.support.v7.widget.AppCompatButton上定义了android:onClick属性,并带有id“save_keywords”。 - Uday

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接