ButterKnife使用不同的布局绑定在Fragment中

时间:2016-01-27 10:25:57

标签: android android-layout android-fragments butterknife

我正在尝试使用片段开发Android应用程序,在尝试使用Butterknife绑定视图并使用@OnClick注释时,我偶然发现了一个问题。

在我的片段中,我根据用户在菜单中的选择来扩展不同的布局。让我们说用户选择设置,然后我膨胀我的设置布局,其中包含用于注销的按钮。如果用户在菜单中选择同步,我会对同步视图进行充气,该视图会保留按钮以开始同步。

我的onCreateView看起来类似于以下代码:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = null;
if(settings)
{
    rootView = inflater.inflate(R.layout.settings_view, container, false);
} else {
    rootView = inflater.inflate(R.layout.sync_view, container, false);
}
return rootView;

}

然后我创建了用于注销按钮的@Onclick方法

@OnClick(R.id.btnSettingsLogout)
    public void logout() {
        Toast.makeText(getActivity(), "Button was pressed!", Toast.LENGTH_SHORT).show();
    }

并将ButterKnife.bind(this, rootView);添加到我的onCreateView方法的末尾,我返回rootView。

现在的问题是,当我向我的设置充气时,一切正常,每当我按下我的退出按钮时,我都会收到toast信息,但是当我为同步视图应用程序膨胀时,由于以下异常而崩溃:

java.lang.RuntimeException: Unable to bind views for si.vitez.testapp.DetailFragment

是否可以注入两个视图,因此应用程序不会崩溃两个视图中的哪一个会被夸大?

1 个答案:

答案 0 :(得分:1)

您应该为方法使用@Nullable注释。

@Nullabale
@OnClick(R.id.yourId)
public void onClickMethod(){
 // your code
}

有关详情,请参阅here