如何处理片段中的onClick

时间:2016-02-21 08:23:02

标签: java android xml android-fragments

这是我对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()不在片段中工作,我应该在哪里编写方法? 片段或我的活动?

4 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:1)

尝试添加方法

public void myLogic(View v)

答案 2 :(得分:1)

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

见以下参考文献

Best way to implement View.OnClickListener in android

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

答案 3 :(得分:1)

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