1

アプリで編集ボックスを使用Tabgroupactivityした場合、アプリで使用します。編集ボックスのキーボードをクリックすると開きます。この tym で、戻るボタンを押すと、アプリが 2 つ戻ります。以下は、tabgroupactivity の私のコードです。

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

1 に答える 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;
            }
        }
    });
于 2012-06-22T07:49:47.713 に答える