OnBackpress Tabgroupactivity не работает, если идентификатор клавиатуры открыт в любой деятельности

1

Я использую Tabgroupactivity в моем приложении, если я использовал editbox в своем приложении. Когда я нажимаю на клавиатуре редактирования, открывается. На этом tym, если если нажать кнопку назад, мое приложение будет два раза назад. Ниже приведен мой код для активности tabgroup.

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>();
}


/**
 * This is called when a child activity of this one calls its finish method. 
 * This implementation calls {@link LocalActivityManager#destroyActivity} on the child activity
 * and starts the previous activity.
 * If the last child activity just called finish(),this activity (the parent),
 * calls finish to finish the entire group.
 */

//  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);
//      setContentView(newWindow.getDecorView());
//  }

@Override
public void finishFromChild(Activity child) 
{
    LocalActivityManager manager = getLocalActivityManager();
    int index = mIdList.size()-1; 
    if (index < 1)
    {
        finish(); 
        return;
    }
    destroy(mIdList.get(index), manager);


    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));
    //Window newWindow = manager.startActivity(lastId, lastIntent);
    setContentView(newWindow.getDecorView()); 
}

public boolean destroy(String id , LocalActivityManager manager) {

    if(manager != null){
        manager.destroyActivity(id, false);
        try {
            final Field mActivitiesField = LocalActivityManager.class.getDeclaredField("mActivities");
            if(mActivitiesField != null){
                mActivitiesField.setAccessible(true);
                @SuppressWarnings("unchecked")
                final Map<String, Object> mActivities = (Map<String, Object>)mActivitiesField.get(manager);
                if(mActivities != null){
                    mActivities.remove(id);
                }
                final Field mActivityArrayField = LocalActivityManager.class.getDeclaredField("mActivityArray");
                if(mActivityArrayField != null){
                    mActivityArrayField.setAccessible(true);
                    @SuppressWarnings("unchecked")
                    final ArrayList<Object> mActivityArray = (ArrayList<Object>)mActivityArrayField.get(manager);
                    if(mActivityArray != null){
                        for(Object record : mActivityArray){
                            final Field idField = record.getClass().getDeclaredField("id");
                            if(idField != null){
                                idField.setAccessible(true);
                                final String _id = (String)idField.get(record);
                                if(id.equals(_id)){
                                    mActivityArray.remove(record);
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return true;
    }

    return false;
} 


/**
 * Starts an Activity as a child Activity to this.
 * @param Id Unique identifier of the activity to be started.
 * @param intent The Intent describing the activity to be started.
 * @throws android.content.ActivityNotFoundException.
 */
public void startChildActivity(String Id, Intent intent) { 
    Window window; 

    window = getLocalActivityManager().startActivity(Id,intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP )); 
    if (window != null) { 
        mIdList.add(Id); 
        setContentView(window.getDecorView()); 
    } 
}

/**
 * The primary purpose is to prevent systems before android.os.Build.VERSION_CODES.ECLAIR
 * from calling their default KeyEvent.KEYCODE_BACK during onKeyDown.
 */
@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);
}

/**
 * Overrides the default implementation for KeyEvent.KEYCODE_BACK 
 * so that all systems call onBackPressed().
 */
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        onBackPressed();
        return true;
    }
    return super.onKeyUp(keyCode, event);
}

/**
 * If a Child Activity handles KeyEvent.KEYCODE_BACK.
 * Simply override and add this method.
 */
@Override
public void  onBackPressed  () {
    int length = mIdList.size();
    if ( length > 1) {
        Activity current = getLocalActivityManager().getActivity(mIdList.get(length-1));
        current.finish();
    }else{
        finish();
    }
}
}
Теги:
android-activity
tabs

1 ответ

1

Попробуйте добавить ключевой прослушиватель в свой EditText, как это,

 eidtText.setOnKeyListener(new OnKeyListener() {

        public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
            if(arg2=KeyEvent.KEYCODE_BACK)
            {
                //handle back event here
                   onBackPressed();
                return true;
            }
            else
            {
                return false;
            }
        }
    });
  • 0
    хорошо, я пытаюсь с этим и вернусь к вам. Спасибо !!
  • 0
    было ли это полезно случайно?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню