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

2つのオプションがあります。

  1. ProverbAdapterを静的にします。private static class ProverbAdapter
  2. MainActivityのインスタンス内でProverbAdapterをインスタンス化します。

これは、非静的内部クラスが外部クラスのインスタンスへの参照を持っているため、その外部クラスのメソッドと変数に簡単にアクセスできるためです。外部クラスのインスタンス内で内部クラスをインスタンス化しない場合、その外部クラスへの参照はありません。


ProverbAdapterを静的にすると、でエラーが発生しgetLayoutInflater()ます。静的内部クラスは、外部クラスのメソッドまたは変数にアクセスできません。を呼び出すことで、この特定の問題を解決できますLayoutInflater.from(getContext());

于 2013-03-04T17:15:59.140 に答える