2013-03-04 65 views
0

我試圖實例化一個自定義列表適配器。片段內自定義列表適配器實例化

適配器:

private class ProverbAdapter extends ArrayAdapter<String> { 
    public ProverbAdapter(Context context, int layout, int resId, String[] items) { 
     super(context, layout, resId, items); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     if(row == null) { 
      row = getLayoutInflater().inflate(R.layout.proverb_layout, parent, false); 
     } 

     String item = getItem(position); 

     return row; 
    } 
} 

實例化

Context c = getActivity().getApplicationContext(); 
ProverbAdapter adapter = new ProverbAdapter(c,R.layout.proverb_layout,R.id.proverb_content,all_proverbs); 

我從說,編譯器得到一個錯誤

沒有MainActivity的封閉類型的訪問。必須使用MainActivity類型的插入實例限定分配。

我不太確定我在做什麼錯在這裏。看起來傳遞片段上下文應該足夠了。

+0

你在哪裏實例化ProverbAdapter? – Sam 2013-03-04 17:18:25

+0

它正在onCreateView()內部實例化,在一個Parse結果集的回調中。 – 2013-03-04 18:09:42

回答

2

你有兩個選擇:

  1. 讓您ProverbAdapter靜:private static class ProverbAdapter
  2. 實例化MainActivity的實例裏面你ProverbAdapter。

這是由於非靜態內部類對其外部類的實例的引用,因此您可以輕鬆訪問該外部類的方法和變量。如果您沒有在外部類的實例內實例化內部類,則沒有可用於該外部類的引用。


如果使ProverbAdapter靜態,你會得到getLayoutInflater()錯誤。靜態內部類無法訪問外部類中的方法或變量。你可以通過撥打LayoutInflater.from(getContext());來解決這個問題。

+0

謝謝!我希望我能夠投票兩次回答問題,然後回答第一個解決方案造成的問題。 – 2013-03-04 18:13:19