让我们再回到previous TabActivity让我们、再回、TabActivity、previous

2023-09-06 04:35:50 作者:拉粑粑的小魔仙

我如何解释我的问题?

我在使用标签(由意图,而不是视图)的应用程序。我已经实现导航不闹每个视图里面,但我需要启动视频播放器从一个ListView内的活动之一,在全屏和横向模式(所以没有选项卡)。但是,当我想给玩家,生活(无论是pressing背部或调用完成();),我的应用程序被关闭(在LogCat中没有例外),并返回到主屏幕。 所以,我需要的是,当我退出全屏活动(推出对于播放器)是回来我的应用程序,蒙山的标签。

I have an application using tabs (by Intents, not views). I have implemented navigation inside each view without trouble but I need to launch video player from a ListView inside one of the Activity in full screen and landscape mode (so without tabs). But when I want to live the player, (either by pressing back or calling finish();), my application is closed (no exceptions in the LogCat) and return to the main screen. So what I need is when I quit the fullscreen Activity(launched for the player) is to come back to my application, whith the tabs.

下面是我的code:

//Main activity : 

package com.ccn;


import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.widget.TabHost;

public class CCNMain extends TabActivity {
    public static TabHost tabHost;
    static CCNMain  myActivity = null;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        myActivity = this;

        Resources res = getResources();
        tabHost = getTabHost();
        TabHost.TabSpec spec; // reusable tabspec for each tab
        Intent intent;

        intent = new Intent().setClass(this, NewsGroup.class);
        spec = tabHost.newTabSpec("nnews")
        .setIndicator("A la une",res.getDrawable(R.drawable.home))
        .setContent(intent);
        tabHost.addTab(spec);

        /*intent = new Intent().setClass(this, ArticlesGroup.class);
        spec = tabHost.newTabSpec("aarticles")
        .setIndicator("Articles",res.getDrawable(R.drawable.articles))
        .setContent(intent);
        tabHost.addTab(spec);*/

        intent = new Intent().setClass(getApplicationContext(), ContactGroup.class);
        spec = tabHost.newTabSpec("vvideos")
        .setIndicator("Vidéos",res.getDrawable(R.drawable.video))
        .setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(getApplicationContext(), ContactGroup.class);
        spec = tabHost.newTabSpec("ccontact")
        .setIndicator("Contact",res.getDrawable(R.drawable.contact))
        .setContent(intent);
        tabHost.addTab(spec);

        tabHost.setCurrentTab(0);
    }
}

//ContactGroup : 
package com.ccn;

import java.util.ArrayList;


import android.app.ActivityGroup;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class ContactGroup extends ActivityGroup {
    // Keep this in a static variable to make it accessible for all the nested activities, lets them manipulate the view  
    public static ContactGroup groupContact;  

        // Need to keep track of the history if you want the back-button to work properly, don't use this if your activities requires a lot of memory.  
    private ArrayList<View> history;  
  @Override
    protected void onCreate(Bundle savedInstanceState) {  
          super.onCreate(savedInstanceState);  
          this.history = new ArrayList<View>();  
          groupContact = this;  

              // Start the root activity within the group and get its view  
          View view = getLocalActivityManager().startActivity("idHoraireActivity", new  
                                            Intent(this,ContactActivity.class)  
                                            .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))  
                                            .getDecorView();  

              // Replace the view of this ActivityGroup  
          replaceView(view);  

       }  

    public void replaceView(View v) {  
                // Adds the old one to history  
        history.add(v);  
                // Changes this Groups View to the new View.  
        setContentView(v);  
    }  

    public void back() {  
        if(history.size() > 1) {  
            history.remove(history.size()-1);  
            setContentView(history.get(history.size()-1));  
        }else {  
            finish();  
        }  
    }  
    //@Override  
    public void onBackPressed() {  
        ContactGroup.groupContact.back();  
        return;  
    }

}

//ContactActivity:
package com.ccn;

import java.io.IOException;

import android.app.Activity;
import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.MediaController;
import android.widget.Toast;
import android.widget.VideoView;

public class ContactActivity extends Activity {
    static ContactActivity bidule = null;
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.videos);
        bidule = this;
        Button btn = (Button) findViewById(R.id.button1);
        btn.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent i = new Intent();
                i.setClass(getApplicationContext(), videoPlayerActivity.class);
                //i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                bidule.startActivity(i);
                ContactActivity.this.startActivityForResult(i, 0);
            }
        });

    }

}

//VideoPlayerActivity:
package com.ccn;

import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.MediaController;
import android.widget.VideoView;


public class videoPlayerActivity extends Activity {

    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.videos);


        //the VideoView will hold the video
        String url = // Video url;

        Button btn = (Button) findViewById(R.id.button1);
        btn.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                finish();
            }
        });
    }


}

在这里,我的清单:

And here my Manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.ccn"
      android:versionCode="1"
      android:versionName="1.0">
<uses-permission android:name="android.permission.INTERNET"></uses-permission>


    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".CCNMain"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="ArticlesGroup"></activity>
        <activity android:name="ContactGroup"></activity>
        <activity android:name="NewsGroup"></activity>
        <activity android:name="NewsActivity"></activity>
        <activity android:name="ArticlesAvtivity"></activity>
        <activity android:name="ContactActivity"></activity>
        <activity android:name="videoPlayerActivity" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:screenOrientation="landscape"></activity>

    </application>
</manifest>

感谢你的帮助。 我的猜测:它与在那里我打电话startActivity和意图的标志。 你怎么看?

Thank you for your help. My guess : it has to do with where I call startActivity and Intent flags. What do you think?

推荐答案

编辑

/Main activity : 

package com.ccn;


import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.widget.TabHost;

public class CCNMain extends TabActivity {
    public static TabHost tabHost;
    static CCNMain  myActivity = null;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        myActivity = this;

        Resources res = getResources();
        tabHost = getTabHost();
        TabHost.TabSpec spec; // reusable tabspec for each tab
        Intent intent;

        intent = new Intent().setClass(this, NewsGroup.class);
        spec = tabHost.newTabSpec("nnews")
        .setIndicator("A la une",res.getDrawable(R.drawable.home))
        .setContent(intent);
        tabHost.addTab(spec);

        /*intent = new Intent().setClass(this, ArticlesGroup.class);
        spec = tabHost.newTabSpec("aarticles")
        .setIndicator("Articles",res.getDrawable(R.drawable.articles))
        .setContent(intent);
        tabHost.addTab(spec);*/

        intent = new Intent().setClass(getApplicationContext(), ContactGroup.class);
        spec = tabHost.newTabSpec("vvideos")
        .setIndicator("Vidéos",res.getDrawable(R.drawable.video))
        .setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(getApplicationContext(), ContactGroup.class);
        spec = tabHost.newTabSpec("ccontact")
        .setIndicator("Contact",res.getDrawable(R.drawable.contact))
        .setContent(intent);
        tabHost.addTab(spec);

        tabHost.setCurrentTab(0);
    }
}

//ContactGroup : 
package com.ccn;

import java.util.ArrayList;


import android.app.ActivityGroup;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class ContactGroup extends ActivityGroup {
    // Keep this in a static variable to make it accessible for all the nested activities, lets them manipulate the view  
    public static ContactGroup groupContact;  

        // Need to keep track of the history if you want the back-button to work properly, don't use this if your activities requires a lot of memory.  
    private ArrayList<View> history;  
  @Override
    protected void onCreate(Bundle savedInstanceState) {  
          super.onCreate(savedInstanceState);  
          this.history = new ArrayList<View>();  
          groupContact = this;  

              // Start the root activity within the group and get its view  
          View view = getLocalActivityManager().startActivity("idHoraireActivity", new  
                                            Intent(this,ContactActivity.class)  
                                            .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))  
                                            .getDecorView();  

              // Replace the view of this ActivityGroup  
          replaceView(view);  

       }  

    public void replaceView(View v) {  
                // Adds the old one to history  
        history.add(v);  
                // Changes this Groups View to the new View.  
        setContentView(v);  
    }  

    public void back() {  
        if(history.size() > 1) {  
            history.remove(history.size()-1);  
            setContentView(history.get(history.size()-1));  
        }else {  
            finish();  
        }  
    }  
    //@Override  
    public void onBackPressed() {  
        ContactGroup.groupContact.back();  
        return;  
    }

}

//ContactActivity:
package com.ccn;

import java.io.IOException;

import android.app.Activity;
import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.MediaController;
import android.widget.Toast;
import android.widget.VideoView;

public class ContactActivity extends Activity {
    //static ContactActivity bidule = null;
      ContactGroup contactGroup = null;
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.videos);
        //bidule = this;
        contactGroup = new ContactGroup();

        Button btn = (Button) findViewById(R.id.button1);
        btn.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                View view = getLocalActivityManager().startActivity("videoPlayerActivity", new  
                                            Intent(this,videoPlayerActivity.class)  
                                            .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))  
                                            .getDecorView();
                contactGroup.replaceView(view);
            }
        });

    }

}

//VideoPlayerActivity:
package com.ccn;

import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.MediaController;
import android.widget.VideoView;


public class videoPlayerActivity extends Activity {
     ContactGroup contactGroup = null;

    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.videos);
         ContactGroup contactGroup = new  ContactGroup();

        //the VideoView will hold the video
        String url = // Video url;

        Button btn = (Button) findViewById(R.id.button1);
        btn.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                 contactGroup.back();
            }
        });
    }

摘要:

您必须调用repalaceView和你的活动组后部的方法。当你想开始新的活动中使用 replaceView(),当你要完成你的活动中使用回()

You have to call repalaceView and back methods of your activity group. When you want to start new activity use replaceView() and when you want to finish your activity use back()