为什么我不能调用片段视图的onClick属性

时间:2020-04-18 17:17:32

标签: android fragment

如果我尝试这样做,则会出现此运行时错误

import cv2
import os
import glob

path = '../Desktop/Plot/'

#print(os.getcwd())

width = 640 
height = 400 

out = cv2.VideoWriter('project.avi', cv2.VideoWriter_fourcc(*'DIVX'), 15, (width,height))

for filename in sorted(glob.glob(path + '*.png')):
    print(filename)

    img = cv2.imread(filename)
    img = cv2.resize(img, (width, height))

    out.write(img)

out.release()

为什么我不能叫它?与onClick?以及为什么系统尝试从活动之类的父级调用它? 而且我在XML属性中发现了警告“找不到声明转到” 你能告诉我为什么吗?

1 个答案:

答案 0 :(得分:0)

我想您正在尝试在片段布局中使用android:onClick,但这肯定会引发IllegalStateException,这是您遇到的例外情况

java.lang.IllegalStateException: Could not find method onShowDialog(View) in a parent 
or ancestor Context for android:onClick attribute defined on view class 

您从日志中尝试将android:onClick = onShowDialog添加到片段布局视图之一。

由于您只能在活动的布局中使用android:onClick,所以会引发错误。因此它尝试在与此片段相关联的活动中找到方法onShowDialog(View view),但是找不到。

因此,可能的解决方案:

不要将android:onClick与片段一起使用,只需以编程方式使用View.OnClickListener而不是调用视图的setOnClickListener()

如果您坚持要这样做,则可以将onShowDialog(View view)添加到片段布局的视图中,但是您需要在活动中定义该方法,如下所示:

public void onShowDialog(View view) {
    Fragment f = getSupportFragmentManager().findFragmentByTag... // get the fragment
    ((MyFragment) f).onShowDialog();
}

然后在您的片段中创建onShowDialog()

注意:我假设您的片段名为MyFragment

相关问题