2012-05-12 29 views
3

在我的應用程序中,我使用listview並通過擴展標準數組適配器來定製關聯的數組適配器。但是,在擴展適配器內部,我無法將視圖聲明爲靜態內部類。 Eclipse不斷給出「靜態類型只能在靜態或頂級類型中聲明」的錯誤。這裏是代碼:無法將ViewHolder聲明爲靜態內部類

public class IconicAdapter extends ArrayAdapter<String> 
{ 
    public static class ViewHolder 
    { 
     public TextView text; 
     public ImageView image; 
    } 

    public IconicAdapter() { 
     super(MainActivity.this,R.layout.row,values); 
     // TODO Auto-generated constructor stub 
    } 

    public View getView(int position,View convertView, ViewGroup parent) 
    { 
     View row = convertView; 
     if(row == null) 
     { 
      LayoutInflater inflater = getLayoutInflater(); 
      row = inflater.inflate(R.layout.row, parent,false); 
     } 
     TextView label =(TextView)row.findViewById(R.id.label); 
     label.setText(values[position]); 
     ImageView icon = (ImageView)row.findViewById(R.id.icon); 
     icon.setImageResource(R.drawable.ok); 

     return (row); 
    } 
} 

任何建議?

+0

IconicAdapter.java是'IconicAdapter'還是'IconicAdapter'是其他內部類? – CommonsWare

+0

IconicAdapter是活動類的內部類,其中包含列表活動 – user1107888

回答

8

如果IconicAdapter是一個內部類,除非IconicAdapter被聲明爲靜態類,否則您將無法在其中聲明內部靜態類。

+5

@ user1107888:只需將「ViewHolder」移動爲活動的靜態內部類。 – CommonsWare

+0

@CommonsWare:這工作,我正在接受標記的答案,但請你詳細說明概念。謝謝。 – user1107888

+2

在'IconicAdapter'之外移動'ViewHolder',或者在一個單獨的java文件中定義它。這個概念很簡單 - 你不能在非靜態內部類中定義靜態內部類 – avimak