通知バーで通知を押すと、フラグメントを開こうとしています。私のアプリの構造は次のとおりです。
メニューから開かれるいくつかのフラグメント
b.setOnClickListener(new OnClickListener() {
@SuppressWarnings({ "deprecation", "static-access" })
public void onClick(View v) {
w_nm=(NotificationManager) getActivity().getSystemService(getActivity().NOTIFICATION_SERVICE);
Notification notify=new Notification(R.drawable.notnificationlogo,waternoti,System.currentTimeMillis());
Intent notificationIntent = new Intent(getActivity(), Abc.class);
PendingIntent pending=PendingIntent.getActivity(getActivity(), 0,notificationIntent, 0);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP );
notify.flags = Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL;
notify.setLatestEventInfo(getActivity(),waternoti,waternoti1, pending);
w_nm.notify(0, notify);
誰でも次のフラグメントページとリンクする方法を教えてもらえますか(現在のコードはフラグメントを拡張するクラスにあります)
通常どおり、基本アクティビティを開始する必要がありますが、開くメニューフラグメントに関する追加情報をインテントに追加します。ここで、それがどのように行われるかを見ることができます: https://stackoverflow.com/a/8610916/1652236
これは、フラグメントの開始/ロードに使用するアクティビティ 'onCreate()'メソッドで取得する追加情報に依存します。
フラグメントの使用方法の例については、こちらをご覧ください: http://www.tutorialspoint.com/Android/android_fragments.htmhttp://developer.Android.com/guide/components/fragments .html
この手順を開始する意図は次のようになります。
Intent notificationIntent = new Intent(getActivity(), Abc.class);
notificationIntent.putExtra("menuFragment", "favoritesMenuItem");
そしてあなたのベースアクティビティで:
@Override
protected void onCreate(final Bundle savedInstanceState)
{
String menuFragment = getIntent().getStringExtra("menuFragment");
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
// If menuFragment is defined, then this activity was launched with a fragment selection
if (menuFragment != null) {
// Here we can decide what do to -- perhaps load other parameters from the intent extras such as IDs, etc
if (menuFragment.equals("favoritesMenuItem")) {
FavoritesFragment favoritesFragment = new FavoritesFragment();
fragmentTransaction.replace(Android.R.id.content, favoritesFragment);
}
} else {
// Activity was not launched with a menuFragment selected -- continue as if this activity was opened from a launcher (for example)
StandardFragment standardFragment = new StandardFragment();
fragmentTransaction.replace(Android.R.id.content, standardFragment);
}
}
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP )
インテントがFlags:FLAG_ACTIVITY_SINGLE_TOPを設定しているため、アクティビティの作成時に "onCreate()"は呼び出されません。代わりに、 "onNewIntent()"というメソッドでパラメーターを受け取る必要があります。
2019およびナビゲーションコンポーネントへようこそ:)
Navigation
コンポーネントを使用している場合、NavDeepLinkBuilder
を使用して特定の宛先を開くことができます。
val pendingIntent = NavDeepLinkBuilder(context)
.setComponentName(MainActivity::class.Java)
.setGraph(R.navigation.nav_graph)
.setDestination(R.id.destination)
.setArguments(bundle)
.createPendingIntent()
...
notificationBuilder.setContentIntent(pendingIntent)
...
目的地がランチャーアクティビティにない場合にのみ、setComponentName
を使用することが重要です。
また、。commit();およびft1.addToBackStack(null);を追加して、prevoiusで重複しないようにし、これを広告しない場合ft1.addToBackStack(null);バックでアプリが終了するので、機能に応じてこれを追加します
String menuFragment = getIntent().getStringExtra("menuFragment");
ft1 = getSupportFragmentManager().beginTransaction();
ft1.addToBackStack(null);
ft1.replace(R.id.frame_container, favoritesFragment).commit();