将onclick监听器添加到片段xml中的按钮

时间:2014-05-16 16:27:46

标签: java android android-fragments

我正在使用android studio编写和android 4.4项目。

我对片段的想法不熟悉,并尝试使用点击处理程序向日志发送消息的按钮创建一个简单的应用程序。

这是片段类

public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main_menu, container, false);
        return rootView;
    }

    public void addStringClickHandler(View v) {
        Log.d("tag","hello");
    }
}

这是片段布局XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.tuxin.myalcoholist.myalcoholist.myalcoholist.MainMenuActivity$PlaceholderFragment">

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/add_drink"
    android:id="@+id/add_drink"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="36dp"
    android:onClick="addStringClickHandler" />
</RelativeLayout>

你可以看到我在XML android:onclick中设置了addStringClickHandler 并且在片段类中我创建了该函数,但是当我执行应用程序时 我收到一个错误,运行时无法找到方法addStringClickHandler(view)

我错过了什么?

2 个答案:

答案 0 :(得分:4)

您的android:onClick处理程序方法必须属于托管您的片段的Activity。只需将addStringClickHandler()方法移至活动。

如果你想在片段中有一个监听器方法,你必须在代码中设置监听器。

 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) {
     View rootView = inflater.inflate(R.layout.fragment_main_menu, container, false);
     rootView.findViewById(R.id.add_drink).setOnClickListener(new OnClickListener() {  
         @Override
         public void onClick(View v) {
            Log.d("tag","hello");
         }
     });
     return rootView;
 }

答案 1 :(得分:0)

尝试在充气视图时注册onClick方法。

View rootView = inflater.inflate(R.layout.fragment_main_menu, container, false);
rootView.findViewById(R.id.add_drink).setOnClickListener(new OnClickListener() {
    public void onClick(View view) {
        // do what you need               
    }
});
return rootView;

或者您可以将片段设置为on click侦听器

View rootView = inflater.inflate(R.layout.fragment_main_menu, container, false);
rootView.findViewById(R.id.add_drink).setOnClickListener(this);
return rootView;

然后使片段实现OnClickListener