когда нажимаете кнопку «Назад» в activitygroup, она не работает

#android #android-activity #android-tabhost #activitygroup

#Android #android-активность #android-tabhost #activitygroup

Вопрос:

В моем приложении я использую TabActivity с пятью вкладками, каждая вкладка содержит ActvityGroup, каждая ActivityGroup управляет более чем одним действием. одна из ActivtyGroups имеет две активности: A и B, при нажатии кнопки в A она переходит к B. при возврате к A я хочу отобразить некоторые измененные данныев B. я встречаю:

во-первых, если я запускаю B и какой-либо виджет в B получает фокус, при нажатии кнопки «Назад» приложение выходит напрямую.я отлаживаю ее и нахожу, что при завершении B она одновременно завершает приложение. во-вторых, если я запускаю B и ни один из виджетов не попадает в фокус, при нажатии кнопки «Назад» onKeyDown() в B не работает.

Вот моя activitygroup, я использую 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);
}
  

в классе A:

 public void handleActivityResult(int requestCode,int resultCode,Intent data)
{
    if(resultCode==RESULT_CANCELED)
    {
        String price=data.getExtras().getString("price");
               ......
    }
}
  

заранее благодарю вас, ребята!!

Комментарии:

1. Получает ли onKeyDown() вызовы в ActivityGroup при нажатии кнопки «Назад» из Activity B?

2. если я установлю один из EditText .requestFocus() в классе B, даже если он не получит фокус (я имею в виду, что он не меняет цвет). он может успешно вернуться, но он не запускает onKeyDown() как в B, так и в Group. но если один из EditText изменит цвет в классе B, он запустит onKeyDown () в классе B, и когда программа перейдет к «finish ()» line.it выходите.

3. Пожалуйста, проверьте эти примеры richipal.com/post/2624844577 а также androidgenuine.com

Ответ №1:

добавьте в свой класс следующее, которое вызывается из класса, который расширяет TabGroupActivity

 @Override
    public void onBackPressed() {
       return;
    }