4

我有一個使用操作欄選項卡的Android應用程序。還有一個通知系統。通知點擊Android開放特定選項卡片段

我想在點擊通知時直接打開特定的選項卡。如何做到這一點(因爲通知掛起的意圖只能打開活動,而我的主要活動包含3個片段的3個片段)?

以下是標籤主要活動的代碼。

public class MaintabActivity extends Activity { 
public static Context appContext; 
public static MapView mMapView; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mainsc); 
    appContext = getApplicationContext(); 

    startService(new Intent(this, MyService.class)); 


    //ActionBar 
    ActionBar actionbar = getActionBar(); 
    actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    ActionBar.Tab ChatTab = actionbar.newTab().setText("Chat"); 
    ActionBar.Tab MapsTab = actionbar.newTab().setText("Maps"); 
    ActionBar.Tab SplashTab=actionbar.newTab().setText("Splash"); 

    Fragment ChatFrag = new ChatActivity(); 
    MapActivity mMapFragment = MapActivity.newInstance(); 
    Fragment SplashFrag = new SplashActivity(); 


    ChatTab.setTabListener(new MyTabsListener(ChatFrag)); 
    MapsTab.setTabListener(new MyTabsListener(mMapFragment)); 
    SplashTab.setTabListener(new MyTabsListener(SplashFrag)); 

    actionbar.addTab(ChatTab); 
    actionbar.addTab(MapsTab); 
    actionbar.addTab(SplashTab); 

} 




@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putInt("tab", getActionBar().getSelectedNavigationIndex()); 
} 

    } 

    class MyTabsListener implements ActionBar.TabListener { 
public Fragment fragment; 

public MyTabsListener(Fragment fragment) { 
    this.fragment = fragment; 
} 

@Override 
public void onTabReselected(Tab tab, FragmentTransaction ft) { 
    Toast.makeText(MaintabActivity.appContext, "Reselected!", Toast.LENGTH_LONG).show(); 
} 

@Override 
public void onTabSelected(Tab tab, FragmentTransaction ft) { 
    ft.replace(R.id.fragment_container, fragment); 
} 

@Override 
public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
    ft.remove(fragment); 
} 

    } 

這是顯示通知的服務中的代碼。

private void showNotification() { 

     CharSequence text = getText(R.string.local_service_started); 

     // Set the icon, scrolling text and timestamp 
     Notification notification = new Notification(R.drawable.ic_launcher, text, 
       System.currentTimeMillis()); 

     // The PendingIntent to launch our activity if the user selects this notification 
     PendingIntent contentIntent = PendingIntent.getActivity(this, 0, 
       new Intent(this, MaintabActivity.class), 0); 

     // Set the info for the views that show in the notification panel. 
     notification.setLatestEventInfo(this, getText(R.string.local_service_label), 
         text, contentIntent); 

     // Send the notification. 
     mNM.notify(NOTIFICATION, notification); 
    } 
+0

@ user2319636-post some code。 – TheFlash 2013-05-04 04:43:23

+1

代碼是什麼?它的常規操作欄選項卡,我想打開假設標籤乙點擊通知。 – user2319636 2013-05-04 05:16:21

+0

user2319636 - 當你點擊通知時,它會調用你的包含Tabs的activity,你可以通過viewPager調用你的特定片段 - viewPager.setCurrentItem(position); – TheFlash 2013-05-04 05:19:25

回答

4

傳遞動作指定選項卡以打開意圖以及未決意圖。並在您的活動檢索操作(請參閱getIntent())傳遞並基於它,打開一個特定的選項卡。

Intent intent = new Intent(this, Home.class); 
intent.setAction("OPEN_TAB_1"); 
PendingIntent pending intent = PendingIntent.getService(this, 0, intent, 0);    

// In OnCreate() or depending on implementation 
if(getIntent().getAction().equals("OPEN_TAB_1") { 
    // Open Tab 
} 
+0

非常感謝!但是如何打開我的代碼標籤? – user2319636 2013-05-05 03:11:50

+0

調用ActionBar的selectTab()方法 – Anirudh 2013-05-05 06:06:34

+0

如果您使用的是ActionBar(android.support.v7.app)調用'actionBar.setSelectedNavigationItem(YOUR_TAB_ORDER_ID);' – 2015-11-15 09:33:14

0

在這裏找到我的答案:Launch a fragment in my Android application from the notification bar。我認爲這與將extra s添加到您的Intent中並沒有多大區別,但可以使用Androidaction -idea。

送出動作到您的通知功能:

public static void notify(Context context, String message, String action) { 

    action = action.toUpperCase(); 

    //... 

    Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()); 

    if(action != null && launchIntent != null){   
     launchIntent.setAction(action);   
    } 

    PendingIntent pendingIntent = PendingIntent.getActivity(context, -1, launchIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    notification.when = System.currentTimeMillis(); 
    notification.flags |= Notification.FLAG_AUTO_CANCEL; 

    // Set the notification and register the pending intent to it 
    notification.setLatestEventInfo(context, appName, message, pendingIntent); 

    // Trigger the notification 
    notificationManager.notify(0, notification); 
} 

,然後得到的行動,並推出相應的片段。