黄油刀碎片按钮不起作用

Posted

技术标签:

【中文标题】黄油刀碎片按钮不起作用【英文标题】:Butterknife Fragment Button not working 【发布时间】:2014-07-30 08:02:24 【问题描述】:

我有一个正在使用 Butterknife 的 Fragment。

public class FooFragment extends Fragment 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
        View view = inflater.inflate(R.layout.foo, container, false);

        ButterKnife.inject(this, view);

        return view;
    

    @OnClick(R.id.some_btn)
    public void someButtonOnClick() 
        // do something
    

但是,当点击屏幕上的按钮时,永远不会调用 someButtonOnClick 方法。

对我在 Butterknife 框架中做错了什么的想法?

这是正在使用的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:orientation="vertical"
    android:background="@color/White">

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="horizontal">

        <Button
            android:id="@+id/some_btn"
            android:layout_
            android:layout_
            android:layout_weight="1"
            android:layout_margin="@dimen/xsmall_margin"
            android:background="@drawable/some_btn_selection" />

        <Button
            android:id="@+id/some_other_btn"
            android:layout_
            android:layout_
            android:layout_weight="1"
            android:layout_margin="@dimen/xsmall_margin"
            android:background="@drawable/some_other_btn_selection" />
    </LinearLayout>
</LinearLayout>

【问题讨论】:

可能不相关(因为它会导致编译错误),但是您是否有机会尝试在库项目中执行此操作(与普通的 android 应用程序项目相比)? ButterKnife flat-out 在图书馆项目中不起作用,因为他们的 R.id 不是最终的。第二个问题,您是否将此片段子类化并期望它起作用?我觉得 ButterKnife 注释(如 OttoBus)仅在被实例化的实际类上有效。如果您要对此片段进行子类化,请尝试在子类中重新实现 someButtonOnClick 方法(带有注释)以确认问题。 给我看 R.layout.foo 不,它不是库的一部分,我的 Fragment 类也不是 Fragment 以外的任何类的子类。 我还尝试在 Activity 的 onCreate 中放置一个 ButterKnife.inject(this),认为 ButterKnife 需要它来包含 Activity,但很可惜,没有乐趣。我仍然无法让它为 Fragments 工作,只是 Activity。 你得到什么解决方案,我也面临同样的问题 【参考方案1】:

适用于最新的 ButterKnife 8.0.1 June -2016

InjectViewinject 已替换为 BindViewbind 这是要遵循的步骤:-

否决票 不接受 来自 Butterknife github 页面:

将此添加到您的项目级 build.gradle

buildscript 
  repositories 
    mavenCentral()
   
  dependencies 
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
  

将此添加到您的模块级 build.gradle

apply plugin: 'android-apt'

android 
  ...


dependencies 
  compile 'com.jakewharton:butterknife:8.0.1'
  apt 'com.jakewharton:butterknife-compiler:8.0.1'

然后像这样使用Butterknife

 private Unbinder unbinder;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) 
        // Inflate the layout for this fragment
        View calcView = inflater.inflate(R.layout.content_main, container, false);

        unbinder = ButterKnife.bind(this, calcView);

        return calcView;
    

    @Override
    public void onDestroyView() 
        super.onDestroyView();
        unbinder.unbind();
    


    @OnClick(R.id.one)
    public void one() 

        Toast.makeText(getActivity(), "Working", Toast.LENGTH_SHORT).show();
        result.setText(result.getText().toString() + 1);
    

【讨论】:

我越来越找不到'com.neenbedankt.gradle.plugins:android-apt:1.8' Ups,我忘了添加 mavenCentral()。 瓦特解绑器?它说不能解析器符号;顺便说一句 ButterKnife.bind() 返回无效! 在butterknife使用文档jakewharton.github.io/butterknife中有描述,搜索主题'BINDING RESET'。你也可以阅读github.com/JakeWharton/butterknife/issues/291【参考方案2】:

只需使用这个结构:

@OnClick(R.id.some_btn)
public void someButtonOnClick(View view) 
    // do something

这里有描述http://developer.android.com/reference/android/R.attr.html#onClick

【讨论】:

【参考方案3】:

这对我有用:

@Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    View view = inflater.inflate(R.layout.fragment_home, container, false);
    ButterKnife.bind(getActivity(), view);
    return view;

【讨论】:

【参考方案4】:

如果您仍有问题。清理项目并尝试运行。它应该修复。如果您仍然有问题,请在onCreate 中调用someButtonOnClick() 并运行并删除它,然后再次运行它。它应该工作。它对我有用。

【讨论】:

以上是关于黄油刀碎片按钮不起作用的主要内容,如果未能解决你的问题,请参考以下文章

黄油刀ButterKnife的使用

我的链接按钮不起作用[重复]

浮动动作按钮!为啥它不起作用?

再次播放按钮不起作用

为啥我的导航栏按钮不起作用(我只是一个初学者,对不起......)

按钮或标签不起作用