Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.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
在Java静态类上找不到方法_Java_Android_Static Methods - Fatal编程技术网

在Java静态类上找不到方法

在Java静态类上找不到方法,java,android,static-methods,Java,Android,Static Methods,我使用的是Android通用图像加载器 在所有示例代码中,视图都是通过XML创建的。我需要通过Java创建视图(无膨胀)。我尝试将视图转换为PhotoDisplayView对象,并调用.test()。但是找不到.test() public View getView(int position, View convertView, ViewGroup parent) { final ViewHolder holder; View vie

我使用的是Android通用图像加载器

在所有示例代码中,视图都是通过XML创建的。我需要通过Java创建视图(无膨胀)。我尝试将视图转换为PhotoDisplayView对象,并调用.test()。但是找不到.test()

public View getView(int position, View convertView, ViewGroup parent)
        {
            final ViewHolder holder;
            View view = convertView;
            if (view == null) {
                view = new PhotoDisplayView(parent.getContext());
                holder = new ViewHolder();
                assert view != null;
                holder.imageView = (PhotoDisplayView)view.test();//test() CANNOT BE FOUND
                view.setTag(holder);
            } else {
                holder = (ViewHolder) view.getTag();
            }
}
这是我的静态课程

static class PhotoDisplayView extends FrameLayout
    {
        public ImageView imageView;
        public ProgressBar progressBar;

        public PhotoDisplayView(Context context)
        {
            super(context);
            imageView = new ImageView(context);
            progressBar = new ProgressBar(context);
        }

        public void test()
        {
            Log.d("TEST","TEST");
        }
    }
我不明白为什么将其转换为PhotoDisplayView对象不会让我访问其功能?我拿了一个视图对象,并将其转换为它的子类版本。为什么找不到方法呢


注意:如果我将对象声明为PhotoDisplayView而不是视图,我确实可以访问该方法

我认为这只需要更多的括号来确保您按照正确的顺序进行操作<代码>(PhotoDisplayView)视图。测试()将被解释为“调用
View.test()
,然后将结果强制转换为
PhotoDisplayView
。请尝试以下操作:

// Should work
holder.imageView = ((PhotoDisplayView)view).test();
编辑:
另一个问题是,您的
test()
方法是type
void
。如果要将其分配给
holder.imageView
,则需要确保它有一个返回值。

我认为您强制转换为PhotoDisplayView,但您将此对象保存为ViewHolder,而不是PhotoDisplayView

你可以这样做:

 public View getView(int position, View convertView, ViewGroup parent)
    {
        final ViewHolder holder;
        View view = convertView;
        if (view == null) {
            view = new PhotoDisplayView(parent.getContext());
            holder = new ViewHolder();
            assert view != null;
            PhotoDisplayView photodisplay=view.test();
            photodisplay.photodisplaymethods();
            holder.imageView = photodisplay;
            view.setTag(holder);
        } else {
            holder = (ViewHolder) view.getTag();
        }

}

Ya我不需要让这个方法工作,只要找到它就行了哈哈。@Aggressor一开始可能是这样的。但是编译器基本上是这样做的:1.在
视图
对象上调用
test()
。2.将结果强制转换到
PhotoDisplayView
。因为
视图
没有
测试()
method,它在第1步出错。添加括号使它首先强制转换类,然后运行该方法。因此我正在强制转换结果。明白了,这就清除了它。来自C#、Obj-C和Swift,我与Java玩得很开心哈哈哈