1

ボタンをクリックすると、アプリ内のアクティビティが 2 番目のアクティビティを作成します。2 番目のアクティビティを起動するコードは次のとおりです。

Button addAlarmButton = findViewById(R.id.addAlarmButton);
addAlarmButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(getApplicationContext(), Activity_AddAlarm.class);
        startActivity(intent);
    }
});

アプリは現在不完全です。2 番目のアクティビティには、プログラムでフラグメントを配置するフラグメント ホルダーがあります。(さらにフラグメントを追加するようにコーディングします。)

public class Activity_AddAlarm extends AppCompatActivity {

    private static FragmentManager fragmentManager;
    private static ActionBar actionBar;

    private static final String BACK_STACK_TAG = "addAlarmActivity_fragment_stack";

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_alarm);

        setSupportActionBar((Toolbar) findViewById(R.id.toolbar2));

        actionBar = getSupportActionBar();
        assert actionBar != null;
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        fragmentManager = getSupportFragmentManager();

        fragmentManager.beginTransaction()
                .replace(R.id.addAlarmActFragHolder, new Fragment_AddAlarmActivity_AddAlarm())
                .addToBackStack(BACK_STACK_TAG)
                .commit();
        fragmentManager.executePendingTransactions();


    }

    @Override
    public void onBackPressed() {
        goBack();
    }

    private void goBack() {
        if (fragmentManager.getBackStackEntryCount() > 1) {
            fragmentManager.popBackStackImmediate();
        } else {
            NavUtils.navigateUpFromSameTask(this);
        }
    }
}

フラグメント クラスは次のようになります。

public class Fragment_AddAlarmActivity_AddAlarm extends Fragment {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.frag_add_alarm_act_add_alarm, container, false);
    }
}

最初のアクティビティでボタンをクリックするとすぐにonCreateView(...)、フラグメント クラスのメソッドで例外がスローされます。

2020-07-19 01:15:13.315 9853-9853/in.basulabs.shakealarmclock E/TypefaceCompatApi26Impl: Unable to collect necessary methods for class java.lang.NoSuchMethodException
    java.lang.NoSuchMethodException: android.graphics.FontFamily.<init> []
        at java.lang.Class.getConstructor0(Class.java:2332)
        at java.lang.Class.getConstructor(Class.java:1728)
        at androidx.core.graphics.TypefaceCompatApi26Impl.obtainFontFamilyCtor(TypefaceCompatApi26Impl.java:321)
        at androidx.core.graphics.TypefaceCompatApi26Impl.<init>(TypefaceCompatApi26Impl.java:84)
        at androidx.core.graphics.TypefaceCompatApi28Impl.<init>(TypefaceCompatApi28Impl.java:36)
        at androidx.core.graphics.TypefaceCompat.<clinit>(TypefaceCompat.java:47)
        at androidx.core.graphics.TypefaceCompat.create(TypefaceCompat.java:190)
        at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
        at android.widget.TextView.resolveStyleAndSetTypeface(TextView.java:2183)
        at android.widget.TextView.setTypefaceFromAttrs(TextView.java:2154)
        at android.widget.TextView.applyTextAppearance(TextView.java:4105)
        at android.widget.TextView.<init>(TextView.java:1630)
        at android.widget.TextView.<init>(TextView.java:990)
        at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:99)
        at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:95)
        at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:182)
        at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:103)
        at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1407)
        at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1457)
        at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:240)
        at android.view.LayoutInflater.tryCreateView(LayoutInflater.java:1059)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:995)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:959)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1121)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1082)
        at android.view.LayoutInflater.parseInclude(LayoutInflater.java:1261)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1117)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1082)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1124)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1082)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:680)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:532)
        at in.basulabs.shakealarmclock.Fragment_AddAlarmActivity_AddAlarm.onCreateView(Fragment_AddAlarmActivity_AddAlarm.java:17)
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2600)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:881)
        at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
        at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManagerImpl.java:2659)
        at androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManagerImpl.java:2613)
        at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:246)
        at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:542)
        at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:201)
        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1435)
        at android.app.Activity.performStart(Activity.java:8008)
        at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3382)
        at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
        at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
2020-07-19 01:15:13.315 9853-9853/in.basulabs.shakealarmclock E/TypefaceCompatApi26Impl:     at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2049)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7523)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941)

フラグメントが正しくロードされていることに注意してください。戻る/上へのボタンを押すと、問題なく前のアクティビティに戻ることができます。

<include layout="@layout/..."/>プログラムでフラグメントを追加する代わりに、タグを使用して 2 番目のアクティビティのフラグメント ホルダーに含めるようにフラグメント レイアウト ファイルを変更しました。2 番目のアクティビティで例外が発生しましたsetContentView(...)。スタック トレースは上記とまったく同じですが、唯一の変更点は、フラグメントではonCreate(...)なくアクティビティでメソッドを表示することです。onCreateView(...)

Google API x86 Intel Atom System Image を実行しているエミュレーターでこのアプリを実行しています。SDK ツールのバージョンは 30.0.1 です。

API 25 エミュレーターでアプリを実行すると、このエラーは発生しないことに注意してください。

これは Android 11 プラットフォームのバグですか?

リクエストに応じてフラグメント レイアウト ファイルを提供できます。大きすぎるため、現在は含めません。

モジュール レベルでの依存関係はbuild.gradle次のとおりです。

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.gridlayout:gridlayout:1.0.0'
    implementation 'androidx.cardview:cardview:1.0.0'
    implementation 'androidx.recyclerview:recyclerview:1.1.0'
    implementation 'com.google.android.material:material:1.1.0'
    testImplementation 'junit:junit:4.13'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
4

1 に答える 1