在 Java 静态 Class 上找不到方法

Method Not Found On Java Static Class

我正在使用 Android 通用图像加载器。

在所有示例代码中,视图都是通过 XML 创建的。我需要通过 Java(不膨胀)来创建我的视图。我正在尝试将 View 视图转换为 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();
            }
}

这是我的静态图class

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 对象不能让我访问其功能?我正在获取一个视图对象并将其转换为它的 subclassed 版本。为什么找不到方法?

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

我认为这只需要更多的括号来确保您按正确的顺序做事。 (PhotoDisplayView)view.test(); 将被解释为“调用 View.test() 然后将结果转换为 PhotoDisplayView。相反,试试这个:

// Should work
holder.imageView = ((PhotoDisplayView)view).test();

编辑: 那么,另一个问题是您的 test() 方法是类型 void。如果要将其分配给 holder.imageView,则需要确保它具有 return 值。

我认为您投射到 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();
        }

}