Java静态类上找不到的方法

时间:2015-05-08 21:58:13

标签: java android static-methods

我使用的是Android Universal Image Loader。

在所有示例代码中,视图都是通过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,我可以访问该方法

2 个答案:

答案 0 :(得分:3)

我认为这需要更多的括号,以确保您按正确的顺序做事。 r.table(...).update({"NEWCOL": null}) 将被解释为"调用(PhotoDisplayView)view.test();,然后将结果转换为View.test()。相反,试试这个:

PhotoDisplayView

修改 好吧,另一个问题是您的// Should work holder.imageView = ((PhotoDisplayView)view).test(); 方法是test()类型。如果要将其分配给void,则需要确保它具有返回值。

答案 1 :(得分:-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();
        }

}