1

のために、私はチュートリアルの次オーセンティケータを作ってるんだ:http://blog.udinic.com/2013/04/24/write-your-own-android-authenticator/AccountAuthenticatorActivityがAPPCOMPAT

ログインアクティビティAccountAuthenticatorActivityを拡張する必要があり、問題はここから始まる:AccountAuthenticatorActivityは、通常のActivityなくAppCompatActivityを拡張します。

AppCompatの標準Activityを使用すると、にはActionBarが含まれません。私はを使用し、ActionBarを持っています。

+0

[使用するAppCompatDelegate](https://github.com/SelvinPL/SyncFrameworkAndroid/blob/master/demo/src/main/java/pl/selvin/android/listsyncsample/authenticator/AccountAuthenticatorActivityAppCompat.java)あなたのアクティビティをこの実装から取り出し、 'getDelegate()。setSupportActionBar()'を使用してください。 – Selvin

+0

AppCompatDelegate(v7サポートライブラリ)のAndroidドキュメントへのリンクhttps://developer.android.com/reference/android/support/v7/app/AppCompatDelegate .html –

答えて

6

キーは、私のコードは、Androidのメーカーによって生成されたAppCompatPreferenceActivityクラスに基づいており、AppCompatDelegateです:

@SuppressWarnings("unused") 
public class AppCompatAuthActivity extends AccountAuthenticatorActivity { 

    private AppCompatDelegate mDelegate; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     getDelegate().installViewFactory(); 
     getDelegate().onCreate(savedInstanceState); 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     getDelegate().onPostCreate(savedInstanceState); 
    } 

    public ActionBar getSupportActionBar() { 
     return getDelegate().getSupportActionBar(); 
    } 

    public void setSupportActionBar(@Nullable Toolbar toolbar) { 
     getDelegate().setSupportActionBar(toolbar); 
    } 

    @Override 
    @NonNull 
    public MenuInflater getMenuInflater() { 
     return getDelegate().getMenuInflater(); 
    } 

    @Override 
    public void setContentView(@LayoutRes int layoutResID) { 
     getDelegate().setContentView(layoutResID); 
    } 

    @Override 
    public void setContentView(View view) { 
     getDelegate().setContentView(view); 
    } 

    @Override 
    public void setContentView(View view, ViewGroup.LayoutParams params) { 
     getDelegate().setContentView(view, params); 
    } 

    @Override 
    public void addContentView(View view, ViewGroup.LayoutParams params) { 
     getDelegate().addContentView(view, params); 
    } 

    @Override 
    protected void onPostResume() { 
     super.onPostResume(); 
     getDelegate().onPostResume(); 
    } 

    @Override 
    protected void onTitleChanged(CharSequence title, int color) { 
     super.onTitleChanged(title, color); 
     getDelegate().setTitle(title); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     getDelegate().onConfigurationChanged(newConfig); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     getDelegate().onStop(); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     getDelegate().onDestroy(); 
    } 

    public void invalidateOptionsMenu() { 
     getDelegate().invalidateOptionsMenu(); 
    } 

    private AppCompatDelegate getDelegate() { 
     if (mDelegate == null) { 
      mDelegate = AppCompatDelegate.create(this, null); 
     } 
     return mDelegate; 
    } 

} 

AppCompatDelegateは、(例えば、PreferenceActivityのために)任意の正規ActivityActionBarを追加するための鍵です。

アクティビティがAppCompatAuthActivityに延長されていることを忘れないでください。

+1

ありがとう、この回答は 'PreferenceActivity'と通常の' Activity'クラスを拡張する他の 'Activity'クラスに適用できます。 –

+0

ああ私の神様、そのコードをそのまま貼り付けてください。私はそれを正確にコピーしませんでした。 'getDelegate()。onCreate()'の前に 'super.onCreate()'を呼び出し、 'setSupportActionBar()を呼び出した後でも' onCreateOptionsMenu() () 'を返します。 – Tuby

0

私はそれが実際の解決策ではないと思います。 AppCompatActivities、Fragments & cを標準のものと組み合わせて、サポートライブラリを使ってアプリケーションを実行している場合は、お勧めできません。

AccountAuthenticatorAppCompatActivityAppCompatActivityに拡張して作成してから、コードAccountAuthenticatorActivityをコピーして貼り付けてください。正常に動作しているようです。

誰かに役立つことを願っています。

関連する問題