2013-03-04 36 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

相关问题