私の要件によると、私は自分のアプリケーションのタブを実装する必要があります。このように、各タブは複数のアクティビティに関連付けられます。のような:Tab1、Tab2、Tab3 ...など。Tab1:Activity1、Activity2、Activity3 ....など。私はこのような順序で活動を開始したい: 例:Tab1 - > Activity1 - > Activity2。これはいいです、私はそれを実行しました。デバイスの戻るボタンを押してコールバックを取得するにはどうすればよいですか?
Activity2のデバイスのバックキーを押すと、ホーム画面に戻りますが、アクティビティ1になるはずです。しかし、私はUIコンポーネント(バックボタンのような)を介して戻っている場合、それは正常に動作しています。
以下は、私のTabGoupActivityとActivity1、Activity2の実装です。
TabGruopActivity: -
public class TabGroupActivity extends ActivityGroup {
private ArrayList<String> mIdList;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (mIdList == null) mIdList = new ArrayList<String>();
}
@Override
public void finishFromChild(Activity child) {
LocalActivityManager manager = getLocalActivityManager();
int index = mIdList.size()-1;
if (index < 1) {
finish();
return;
}
// manager.destroyActivity(mIdList.get(index), true);
mIdList.remove(index); index--;
String lastId = mIdList.get(index);
Intent lastIntent = manager.getActivity(lastId).getIntent();
Window newWindow = manager.startActivity(lastId, lastIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
setContentView(newWindow.getDecorView());
}
public void startChildActivity(String Id, Intent intent) {
Window window = null;
try{
window = getLocalActivityManager().startActivity(Id,intent.addFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP));
}catch(Exception e){
System.out.println(e.toString());
}
if (window != null) {
mIdList.add(Id);
setContentView(window.getDecorView());
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
onBackPressed();
return true;
}
return super.onKeyUp(keyCode, event);
}
public void onBackPressed () {
int length = mIdList.size();
if (length >= 1) {
Activity current = getLocalActivityManager().getActivity(mIdList.get(length-1));
current.finish();
}
}
}
TabGroup1Activity:(アクティビティの上)TabGroupActivityを拡張: -
public class TabGroup2Activity extends TabGroupActivity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startChildActivity("Activity2", new Intent(this, DemoActivity2.class));
}
}
Activity1: -
public class DemoActivity2 extends Activity {
Context context;
protected static LocalActivityManager mLocalActivityManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.demo_activity2);
context = this;
Button button = (Button) findViewById(R.id.Button01);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(context, DemoActivity3.class);
TabGroupActivity parentActivity = (TabGroupActivity)getParent();
parentActivity.startChildActivity("Activity3", intent);
}
});
Button button2 = (Button) findViewById(R.id.Button02);
button2.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(
ScrollableTabActivity.ACTION_CHANGE_TAB);
intent.putExtra(ScrollableTabActivity.CURRENT_TAB_INDEX, 0);
sendBroadcast(intent);
}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
TabGroupActivity parentActivity = (TabGroupActivity)getParent();
parentActivity.onBackPressed();
return true;
}
return super.onKeyUp(keyCode, event);
}
}
Activity2: -
public class DemoActivity3 extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.demo_activity3);
Button button = (Button) findViewById(R.id.Button01);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
TabGroupActivity parentActivity = (TabGroupActivity)getParent();
parentActivity.onBackPressed();
}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
TabGroupActivity parentActivity = (TabGroupActivity)getParent();
parentActivity.onBackPressed();
return true;
}
return super.onKeyUp(keyCode, event);
}
}
デバイスバックボタンが機能しない理由を教えてもらえますか?
は、フォーカスの問題のように聞こえます。何か他のものがonKeyイベントを取得しています。 – Erik
はい、私たちが(複数の活動を維持している)タブグループ活動を立ち上げる場所から家庭に来ています。もっと明確にする必要があれば教えてください....ありがとう... – Avnish
これを見てください:http://ericharlow.blogspot.com/2010/09/experience-multiple-android-activities.html – Erik