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

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

4

1 回答 1

2

你有两个选择:

  1. 使您的 ProverbAdapter 静态:private static class ProverbAdapter
  2. 在 MainActivity 的实例中实例化 ProverbAdapter。

这是因为非静态内部类具有对其外部类实例的引用,因此您可以轻松访问该外部类的方法和变量。如果您不在外部类的实例中实例化内部类,则该外部类没有可用的引用。


如果您将 ProverbAdapter 设为静态,您将在getLayoutInflater(). 静态内部类不能访问外部类的方法或变量。您可以通过调用来解决这个特殊问题LayoutInflater.from(getContext());

于 2013-03-04T17:15:59.140 回答