Как получить обратный звонок при нажатии кнопки "Назад" на устройстве?
В соответствии с моими требованиями мне нужно реализовать вкладки для моих приложений. Такой, что каждая вкладка связана с несколькими действиями. Как: Tab1, Tab2, Tab3... и т. Д. Tab1: Activity1,Activity2,Activity3.... и т. Д. Я хочу запустить действия в таком порядке: например: Tab1 -> Activity1 -> Activity2. Это хорошо, я сделал это.
Но если я нажимаю клавишу возврата устройства из Activity2, то он переходит на домашний экран, но должен появиться Activity1. Но если я собираюсь вернуться через пользовательский интерфейс (например, кнопку назад), то он работает нормально.
Ниже приведены мои действия в TabGoupActivity и Activity 1, 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);
}
}
Деятельности2:-
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);
}
}
Кто-нибудь может сказать мне, почему не работает кнопка возврата устройства?
1 ответ
Я использую TabHost и TabActivity, но это должно работать для вас. Надеюсь, что вы можете использовать это:)
поместите этот слушатель в свой:
public class TabGroupActivity extends ActivityGroup
Слушатель:
myListener = new MyListener();
protected class MyListener extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("com.test.switchtabs")) {
int res = intent.getIntExtra("switch",10);
if(res == 0){
tabHost.getTabWidget().getChildAt(0).performClick();
}else if(res == 1){
tabHost.getTabWidget().getChildAt(1).performClick();
}else if(res == 2){
tabHost.getTabWidget().getChildAt(2).performClick();
}
}else if (intent.getAction().equals("com.test.sendnow")) {
sendTheFiles();
}
}
}
Внутри вашего TabGroupActivity зарегистрируйте / отмените углубление ваших потребностей, пользовательский слушатель:
@Override
protected void onResume() {
super.onResume();
if (!MyListenerIsRegistered) {
IntentFilter intentFilterSwitchTabs = new IntentFilter("com.your.package.switchtabs");
registerReceiver(myListener, intentFilterSwitchTabs);
MyListenerIsRegistered = true;
}
}
@Override
protected void onPause() {
super.onPause();
if (MyListenerIsRegistered && myListener != null) {
unregisterReceiver(myListener);
MyListenerIsRegistered = false;
}
}
поместите это в свой AndroidManifest.xml
<activity android:name="com.your.package.TabGroupActivity">
<intent-filter>
<action android:name="com.your.package.switchtabs" />
</intent-filter>
</activity>
Из любого действия отправьте такую трансляцию, чтобы изменить вкладки,
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.etx_addtext_drawtext:
case R.id.button_back:
Intent i = new Intent();
i.putExtra("switch", 1);
i.setAction("com.your.package.switchtabs");
sendBroadcast(i);
break;
}
}