2015-05-08 23 views
1

我正在使用Android通用圖像加載器。在Java靜態類上找不到的方法

在所有示例代碼中,視圖都是通過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,而不是一個視圖我有訪問方法

回答

3

我認爲這只是需要一些更多的括號來確保你以正確的順序做的事情。 (PhotoDisplayView)view.test();將被解釋爲「呼叫View.test()並將結果轉換爲PhotoDisplayView相反,試試這個:

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

編輯: 好了,其他問題是,你的test()方法是鍵入void如果你想要的。將其分配給holder.imageView,你需要確保它有一個返回值。

+0

這工作,但它似乎是多餘的? – Aggressor

+0

雅我不需要讓方法工作就找到它哈哈。 – Aggressor

+1

@Aggressor起初可能會這樣。但編譯器基本上是這樣做的:1.在'View'對象上調用'test()'。 2.將結果轉換爲「PhotoDisplayView」。因爲'View'沒有'test()'方法,所以它在步驟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(); 
     } 

}