在通知点击Android的开放特定的标签片段 [英] Android opening specific tab fragment on notification click

查看:182
本文介绍了在通知点击Android的开放特定的标签片段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Android应用程序,它使用了操作栏选项卡。还有一个通知系统。

我想直接打开一个特定的标签,在点击该通知。如何做到这一点(因为通知挂起的意图只能打开活动,我的主要活动包含3片3片)?

以下是code的mainactivity的标签。

 公共类MaintabActivity延伸活动{
公共静态语境appContext;
公共静态图形页面mMapView;
/ **第一次创建活动时调用。 * /
@覆盖
公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.mainsc);
    appContext = getApplicationContext();

    startService(新意图(这一点,MyService.class));


   //动作条
    动作条动作条= getActionBar();
    actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    ActionBar.Tab ChatTab = actionbar.newTab()的setText(聊天)。
    ActionBar.Tab MapsTab = actionbar.newTab()的setText(地图)。
    ActionBar.Tab SplashTab = actionbar.newTab()的setText(扑通)。

    片段ChatFrag =新ChatActivity();
    MapActivity mMapFragment = MapActivity.newInstance();
    片段SplashFrag =新SplashActivity();


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

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

}




@覆盖
保护无效的onSaveInstanceState(包outState){
    super.onSaveInstanceState(outState);
    outState.putInt(标签,getActionBar()getSelectedNavigationIndex());
}

    }

    类MyTabsListener实现ActionBar.TabListener {
公共片段片段;

公共MyTabsListener(片段片段){
    this.fragment =片段;
}

@覆盖
公共无效onTabReselected(TAB键,FragmentTransaction英尺){
    Toast.makeText(MaintabActivity.appContext,!复选,Toast.LENGTH_LONG).show();
}

@覆盖
公共无效onTabSelected(TAB键,FragmentTransaction英尺){
    ft.replace(R.id.fragment_container,片段);
}

@覆盖
公共无效onTabUnselected(TAB键,FragmentTransaction英尺){
    ft.remove(片段);
}

    }
 

这是从显示通知服务的code。

 私人无效showNotification(){

        CharSequence的文字=的getText(R.string.local_service_started);

        //设置图标,滚动文字和时间戳
        通知通知=新的通知(R.drawable.ic_launcher,文字,
                System.currentTimeMillis的());

        //该PendingIntent来,如果用户选择此通知发布我们的活动
        PendingIntent contentIntent = PendingIntent.getActivity(此,0,
                新的意图(这一点,MaintabActivity.class),0);

        //设置为显示在通知面板的意见信息。
        notification.setLatestEventInfo(这一点,gettext的(R.string.local_service_label)
                       文字,contentIntent);

        //发送通知。
        mNM.notify(通知,通知);
    }
 

解决方案

传递活动指定标签页打开,随着意图未决的意图。而在您的活动取得的行动(见getIntent())通过,在此基础上,打开一个特定的标签。

 意向意图=新的意图(这一点,Home.class);
intent.setAction(OPEN_TAB_1);
PendingIntent未决的意图= PendingIntent.getService(此,0,意向,0);

//在OnCreate中(),或依赖于实现
如果(getIntent()的getAction()。等于(OPEN_TAB_1){
     //打开选项卡
}
 

I have an android application which uses Action Bar Tabs. There is also a notification system.

I want to open a specific tab directly, on clicking the notification. How to do this(because notification pending intents can only open activities, and my main activity contains 3 fragments for 3 tabs) ?

Following is the code for the mainactivity for tabs.

    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);
}

    }

This is the code from the service which shows notification.

    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);
    }

解决方案

Pass action specifying tab to open, along with intent in pending intent. And in your activity retrieve action (see getIntent()) passed and based on it, open a specific tab.

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
}

这篇关于在通知点击Android的开放特定的标签片段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆