Когда кнопка назад в группе активности, она не работает
В моем приложении я использую TabActivity с пятью вкладками, каждая вкладка содержит ActvityGroup, каждая ActivityGroup управляет более чем одним Activity.У одной из ActivtyGroups есть две Activies:A и B, при нажатии кнопки в A происходит переход к B.when вернитесь к A, я хочу отобразить некоторые измененные данные в B. что я встречаю:
во-первых, если я запускаю B и какой-то виджет в B получает фокус, когда нажимаю кнопку "назад", приложение завершает работу напрямую. я отлаживаю его и обнаруживаю, когда завершаю B, оно одновременно завершает приложение. во-вторых, если я запускаю B и ничего из виджет получает фокус, при нажатии кнопки назад функция onKeyDown() в B не работает.
Вот моя группа деятельности, я вижу viewanimator как контейнер:
public class Group extends ActivityGroup
{
private Stack<String>aString;
private LocalActivityManager manager;
private ViewAnimator animator;
private int ID;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.group_products);
aString = new Stack<String>();
animator = (ViewAnimator) findViewById(R.id.pro_va_animator);
manager = getLocalActivityManager();
Intent intent = new Intent(this,Products_Category.class);
startActivity(intent);
}
@Override
public void startActivity(Intent intent)
{
String id = "id" + ID++;
aString.push(id);
View view = manager.startActivity(id, intent).getDecorView();
animator.addView(view);
animator.setDisplayedChild(aString.size() - 1);
}
@Override
public void startActivityForResult(Intent intent,int requestCode)
{
String id = "id" + ID++;
aString.push(id);
View view = manager.startActivity(id, intent).getDecorView();
animator.addView(view);
animator.setDisplayedChild(aString.size() - 1);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK)
{
int size = aString.size();
if (size > 0)
{
String topId = aString.pop();
View view = manager.destroyActivity(topId, true).getDecorView();
animator.removeView(view);
if (size > 1)
{
return true;
}
}
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
A subActivity=(A)(manager.getCurrentActivity());
A.handleActivityResult(requestCode, resultCode, data);
break;
}
}
В классе B я переписываю onKeyDown(), чтобы добавить некоторые измененные данные в связку:
@Override
public boolean onKeyDown(int keyCode,KeyEvent event)
{
if(keyCode==KeyEvent.KEYCODE_BACK)
{
Log.e("prodcuts_3","inner");
Bundle bundle=new Bundle();
bundle.putString("name",name);
bundle.putString("price",price);
bundle.putString("quantity",quantity);
this.setResult(RESULT_CANCELED,this.getIntent().putExtras(bundle));
this.finish();
return this.getParent().onKeyDown(keyCode, event);
}
return super.onKeyDown(keyCode, event);
}
в классе А:
public void handleActivityResult(int requestCode,int resultCode,Intent data)
{
if(resultCode==RESULT_CANCELED)
{
String price=data.getExtras().getString("price");
......
}
}
спасибо, ребята, заранее!
1 ответ
Добавить следующее в ваш класс, который вызывается из класса, который расширяет TabGroupActivity
@Override
public void onBackPressed() {
return;
}