【问题标题】:Method Not Found On Java Static Class在 Java 静态类上找不到方法
【发布时间】:2015-05-08 21:58:13
【问题描述】:

我正在使用 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();
            }
}

这是我的静态类

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 而不是 View,我确实可以访问该方法

【问题讨论】:

    标签: java android static-methods


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的,我不需要让方法起作用,只是找到它哈哈。
    • @Aggressor 乍一看可能是这样。但是编译器基本上是这样做的: 1. 在View 对象上调用test()。 2. 将结果投射到PhotoDisplayView 。因为View 没有test() 方法,所以它在第1 步出错。添加括号使其首先强制转换类,然后 运行该方法。
    • 所以我正在投射结果。明白了,这清除了它。来自 C#、Obj-C 和 Swift,我用 Java 玩得很开心哈哈哈
    【解决方案2】:

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

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-14
      • 2013-07-29
      • 2020-02-27
      • 2018-11-07
      • 1970-01-01
      • 2010-10-30
      • 2011-07-21
      • 2018-10-04
      相关资源
      最近更新 更多