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