android – ActivityのLayoutInflaterにはすでにFactoryがインストールされているので、AppCompat’sをインストールすることはできません。

私は自分のアプリでAppCompatライブラリ(com.android.support:appcompat-v7:22.1.0)を使用しています。アクションバーをフラグメントで作成しました。メニュー項目をクリックすると、警告ダイアログが表示されます。これが私のコードです:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
        case R.id.action_new:
            showFilterDialog();
            return true;
        case R.id.action_send:
            new sendInventoryTask().execute();
            return true;           
        default:
            return super.onOptionsItemSelected(item);
    }
}

そして私のshowInventoryDialogメソッド:

private void showFilterInventoryDialog() {
    AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());

    LayoutInflater inflater= getActivity().getLayoutInflater();

    View v = inflater.inflate(R.layout.dialog_filter_inventory,null);
    alert.setView(v);
    alert.setTitle(getResources().getString(R.string.filters));
    alert.setPositiveButton(getResources().getString(R.string.filter), new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            // TODO
        }

    });

    alert.setNegativeButton(getResources().getString(R.string.cancel), null);
    alert.show();
}

すべてうまくいきますが、メニュー項目をクリックすると、logcatにエラーが表示されます。

I/AppCompatDelegate﹕ The Activity’s LayoutInflater already has a Factory installed so we can not install AppCompat’s

これを解決するには?

ベストアンサー
この場合は、テーマのコンテキストを使用する必要があります。

new AlertDialog.Builder(getActivity());

あなたがしなければなりません

new AlertDialog.Builder(getSupportActionBar().getThemedContext());

その上、あなたはまたここに与えられた親テーマとwindowActionBarのヒントに従う必要があります – support.v7.app.AlertDialog throws NullPointerException on dismiss

転載記事の出典を記入してください: android – ActivityのLayoutInflaterにはすでにFactoryがインストールされているので、AppCompat’sをインストールすることはできません。 - コードログ