我該如何解釋我的問題?回到上一個TabActivity
我有一個應用程序使用標籤(通過意圖,而不是意見)。我已經在每個視圖中實現了導航,沒有任何麻煩,但是我需要從全屏幕和橫向模式中的一個活動(因此沒有選項卡)中的ListView啓動視頻播放器。但是當我想要玩這個玩家時,(通過按回或調用finish();),我的應用程序關閉(LogCat中沒有例外)並返回到主屏幕。 所以我需要的是當我退出全屏時活動(爲玩家啓動)將回到我的應用程序,與選項卡。
這裏是我的代碼:
//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();
}
});
}
}
在這裏,我的清單:
<?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和Intent標誌的位置有關。 你覺得呢?
不,我有問題的任何untabbed活動或外部(如瀏覽器),如果我從一個活動內的TabActivity內啓動它的活動:當孩子活動完成後,它不會回到我的TabActivity,但主屏幕! – dranfi 2011-05-07 23:34:43