Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用butterknife无法正确找到初始化视图_Android_Kotlin_Dependency Injection_Butterknife - Fatal编程技术网

Android 使用butterknife无法正确找到初始化视图

Android 使用butterknife无法正确找到初始化视图,android,kotlin,dependency-injection,butterknife,Android,Kotlin,Dependency Injection,Butterknife,由于某些原因,应用程序找不到视图。但同时,所有视图都以正确的方式初始化。它是包含微调器列表的对话框。此对话框通过包含两个片段的viewPager从“活动”调用。如果你知道问题可能在哪里,请告诉我 class FilterDialogFragment : MvpAppCompatDialogFragment(), FilterView { @Inject @InjectPresenter lateinit var presenter: FilterDialogPresenter @Provid

由于某些原因,应用程序找不到视图。但同时,所有视图都以正确的方式初始化。它是包含微调器列表的对话框。此对话框通过包含两个片段的viewPager从“活动”调用。如果你知道问题可能在哪里,请告诉我

class FilterDialogFragment : MvpAppCompatDialogFragment(), FilterView {

@Inject
@InjectPresenter
lateinit var presenter: FilterDialogPresenter

@ProvidePresenter fun provideFilterDialogPresenter() = presenter

@BindViews(R.id.spinner_gender_ni, R.id.spinner_age_ni, R.id.spinner_country,
        R.id.spinner_relationship_statuses, R.id.spinner_body_types, R.id.spinner_ethnicities,
        R.id.spinner_faith_types, R.id.spinner_smoke_statuses, R.id.spinner_drink_statuses,
        R.id.spinner_have_kids_statuses, R.id.spinner_want_kids_statuses)

lateinit var spinners: List<@JvmSuppressWildcards Spinner>

private lateinit var filterListener: FilterListener

interface FilterListener {
    fun onUpdate()
}

override fun onCreate(savedInstanceState: Bundle?) {
    requireActivity().component.inject(this)
    super.onCreate(savedInstanceState)
}


override fun onAttach(context: Context?) {
    super.onAttach(context)

    if (context is FilterListener) {
        filterListener = context
    }
}

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    dialog.window!!.requestFeature(Window.FEATURE_NO_TITLE)
    val view = inflater.inflate(R.layout.dialog_filters, container, false)
    ButterKnife.bind(this, view)
    return view
}

override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)
    presenter.getSavedValues()
}

override fun onResume() {
    super.onResume()
    dialog.window!!.setLayout(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT)
}

@OnClick(R.id.button_search)
fun onSearchClicked() {
    presenter.saveValues(spinners)
    filterListener.onUpdate()

    dismiss()
}

@OnClick(R.id.button_cancel)
fun onCancelClicked() {
    dismiss()
}

override fun getSavedValues(stringList: List<String>, resIdList: List<Int>) {
    for (i in stringList.indices) {
        if (presenter.isNotDefault(stringList[i])) {
            spinners[i].setSelection(getIndexOfElement(resIdList[i], stringList[i]))
        }
    }
}

private fun getIndexOfElement(@ArrayRes resId: Int, value: String): Int {
    val list = Arrays.asList(*resources.getStringArray(resId))
    return list.indexOf(value)
}

companion object {

    var TAG = "Dialog Fragment"

}
类FilterDialogFragment:MvpAppCompatDialogFragment(),FilterView{
@注入
@注射者
lateinit变量呈现器:FilterDialogPresenter
@ProviderPresenter fun ProviderFilterDialogPresenter()=演示者
@BindView(R.id.spinner\u性别\u ni,R.id.spinner\u年龄\u ni,R.id.spinner\u国家,
R.id.spinner\u关系\u状态,R.id.spinner\u身体类型,R.id.spinner\u种族,
R.id.spinner\u faith\u type、R.id.spinner\u smoke\u status、R.id.spinner\u drink\u status、,
R.id.spinner\u拥有\u孩子\u状态,R.id.spinner\u想要\u孩子\u状态)
lateinit变量微调器:列表
私有lateinit变量filterListener:filterListener
接口过滤器列表器{
乐趣更新()
}
重写创建时的乐趣(savedInstanceState:Bundle?){
requirection().component.inject(此)
super.onCreate(savedInstanceState)
}
重写转速表(上下文:上下文?){
super.onAttach(上下文)
if(上下文为FilterListener){
filterListener=上下文
}
}
覆盖创建视图(充气机:布局充气机,容器:ViewGroup?,savedInstanceState:Bundle?):视图{
dialog.window!!.requestFeature(window.FEATURE\u NO\u TITLE)
val视图=充气机。充气(R.layout.dialog\u过滤器,容器,false)
ButterKnife.绑定(此,视图)
返回视图
}
覆盖活动创建的乐趣(savedInstanceState:Bundle?){
super.onActivityCreated(savedInstanceState)
presenter.getSavedValues()
}
重写onResume(){
super.onResume()
dialog.window!!.setLayout(
ViewGroup.LayoutParams.MATCH_父级,
ViewGroup.LayoutParams.WRAP_内容)
}
@OnClick(R.id.button\u搜索)
有趣的搜索点击(){
presenter.saveValues(微调器)
filterListener.onUpdate()
解雇
}
@OnClick(R.id.button\u cancel)
有趣的一次点击{
解雇
}
覆盖有趣的GetSavedValue(stringList:List,resIdList:List){
对于(stringList.index中的i){
if(presenter.isNotDefault(stringList[i])){
微调器[i].setSelection(getIndexOfElement(resIdList[i],stringList[i]))
}
}
}
private fun getIndexOfElement(@ArrayRes resId:Int,value:String):Int{
val list=Arrays.asList(*resources.getStringArray(resId))
返回列表.indexOf(值)
}
伴星{
var TAG=“对话框片段”
}
错误消息

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.myapp, PID: 18357
java.lang.IllegalStateException: Required view 'spinner_age_mi' with ID 2131296837 for field 'spinners' was not found. If this view is optional add '@Nullable' (fields) or '@Optional' (methods) annotation.
at butterknife.internal.Utils.findRequiredView(Utils.java:92)
at butterknife.internal.Utils.findRequiredViewAsType(Utils.java:104)
at com.myapp.mvp.ui.filter.FilterDialogFragment_ViewBinding.<init>(FilterDialogFragment_ViewBinding.java:43)
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at butterknife.ButterKnife.createBinding(ButterKnife.java:199)
at butterknife.ButterKnife.bind(ButterKnife.java:172)
at com.myapp.mvp.ui.filter.FilterDialogFragment.onCreateView(FilterDialogFragment.kt:63)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2439)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:802)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7762)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1047)
E/AndroidRuntime:致命异常:主
进程:com.myapp,PID:18357
java.lang.IllegalStateException:未找到字段“spinners”的ID为21312296837的必需视图“spinner\u age\u mi”。如果此视图为可选视图,请添加“@Nullable”(字段)或“@optional”(方法)批注。
位于butterknife.internal.Utils.findRequiredView(Utils.java:92)
位于butterknife.internal.Utils.FindRequiredViewaType(Utils.java:104)
在com.myapp.mvp.ui.filter.FilterDialogFragment_ViewBinding.(FilterDialogFragment_ViewBinding.java:43)
位于java.lang.reflect.Constructor.newInstance0(本机方法)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:343)
在butterknife.butterknife.createBinding(butterknife.java:199)
在butterknife.butterknife.bind(butterknife.java:172)
位于com.myapp.mvp.ui.filter.FilterDialogFragment.onCreateView(FilterDialogFragment.kt:63)
位于android.support.v4.app.Fragment.performCreateView(Fragment.java:2439)
位于android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
在android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
位于android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
位于android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:802)
位于android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
位于android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
在android.support.v4.app.FragmentManagerImpl.removedandtoperationsandexecute(FragmentManager.java:2366)
位于android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
位于android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
位于android.os.Handler.handleCallback(Handler.java:883)
位于android.os.Handler.dispatchMessage(Handler.java:100)
位于android.os.Looper.loop(Looper.java:237)
位于android.app.ActivityThread.main(ActivityThread.java:7762)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1047)

函数登录(){
var data=new FormData();
data.append('email',document.getElementById(“用户电子邮件”).value);
data.append('password',document.getElementById('user pass').value);
var xhr=new XMLHttpRequest();
//@TODO-将“server dummy.txt”更改为您的服务器脚本
xhr.open('POST','server dummy.txt',true);
xhr.onload=函数(){
如果(xhr.status==200){
var response=JSON.parse(this.response);
//有效的
如果(响应状态){
//@TODO-登录时将用户重定向到何处?
//location.href=“某处.html”;
}
//无效的电子邮件/密码
否则{
警报(response.message);
}
}否则{
警报(“服务器错误!”);
}
};
发送(数据);
返回false;
}
#登录表单{
最大宽度:400px;
保证金:0自动;
填充:20px;
背景#f2f2;
}
#登录表单h1{
文本对齐:居中;
裕度:0 10px 0;
}
#登录-