片段内的自定义列表适配器实例化

时间:2013-03-04 17:10:14

标签: java android

我正在尝试实例化自定义列表适配器。

适配器:

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的实例来限定分配。

我不确定我在这里做错了什么。似乎传递片段上下文应该足够了。

1 个答案:

答案 0 :(得分:2)

您有两种选择:

  1. 使您的ProverbAdapter静态:private static class ProverbAdapter
  2. 在MainActivity实例中实例化您的ProverbAdapter。
  3. 这是因为非静态内部类具有对其外部类的实例的引用,因此您可以轻松访问该外部类的方法和变量。如果没有在外部类的实例中实例化内部类,则该外部类没有可用的引用。


    如果您将ProverbAdapter设为静态,则会在getLayoutInflater()上收到错误消息。静态内部类不能从外部类访问方法或变量。您可以通过调用LayoutInflater.from(getContext());来解决此特定问题。