繁体   English   中英

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

[英]Custom List Adapter Instantiation Within Fragment

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

适配器:

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. 使您的ProverbAdapter静态: private static class ProverbAdapter
  2. 在MainActivity实例中实例化ProverbAdapter。

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


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM