【问题标题】:add onclick listener to a button in a fragment's xml将 onclick 侦听器添加到片段 xml 中的按钮
【发布时间】:2015-09-11 23:26:35
【问题描述】:

我正在使用 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)

的错误

我错过了什么?

【问题讨论】:

    标签: java android android-fragments


    【解决方案1】:

    您的android:onClick 处理程序方法必须属于托管您的片段的活动。只需将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;
     }
    

    【讨论】:

      【解决方案2】:

      在膨胀视图时尝试注册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;
      

      或者您可以将片段设置为点击监听器

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

      然后让片段实现OnClickListener

      【讨论】:

        猜你喜欢
        • 2011-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-13
        • 1970-01-01
        • 1970-01-01
        • 2012-10-08
        • 2018-04-22
        相关资源
        最近更新 更多