ボタンをクリックすると、アプリ内のアクティビティが 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'
}