Tabgroupactivity的OnBackpress不起作用iff键盘ID在任何活动中打开

我在我的应用程序中使用Tabgroupactivity如果我在我的应用程序中使用编辑框。当我单击编辑框键盘打开。在这个tym,如果按回来按钮我的应用程序去两个背部。 以下是我对tabgroupactivity的代码。Tabgroupactivity的OnBackpress不起作用iff键盘ID在任何活动中打开

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

}

}

}

回答:

尝试增加键收听到您的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;

}

}

});

以上是 Tabgroupactivity的OnBackpress不起作用iff键盘ID在任何活动中打开 的全部内容, 来源链接: utcz.com/qa/258814.html

回到顶部