我有 3 项 Activity 。 第一个 Activity 有一个“向右走”图像按钮。 (转到第二个 Activity ) 第二个 Activity 有“向右走”和“向左走”图像按钮。 (返回第一个 Activity 或移至第三个 Activity )。第三个 Activity 有一个“向左”按钮可以移至第二个 Activity 。 我已经创建了返回键按下事件。
问题是, 您从第 1 个 Activity 导航到第 3 个 Activity ,然后返回并导航到第 3 个 Activity 。 第一个 Activity ---点击向右---->第二个 Activity ---点击向右---->第三个 Activity ---点击向左---->第二个 Activity ----点击向左- ---> 第一个 Activity --- 单击向右移动 ---> 第二个 Activity --- 单击向右移动 ---> 第三个 Activity 。
现在,如果我在第三个 Activity 中按后退键,它就会移至第二个 Activity 。在这里按下返回键,它会移至第一。但在这里,如果我按返回键,它会再次转到第一个 Activity 。只有在第一个 Activity 中按下第二个后退键才会退出应用程序。另一个问题是如何使图像按钮仅在我按下时才可见?
我说得有道理吗?
FirstActivity.java
package com.stylingandroid.Animation;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
public class FirstActivity extends Activity
{
@Override
protected void onCreate( Bundle savedInstanceState )
{
super.onCreate( savedInstanceState );
setContentView( R.layout.first );
((ImageButton)findViewById( R.id.NextButton )).setOnClickListener( new OnClickListener()
{
@Override
public void onClick( View v )
{
startActivity( new Intent( FirstActivity.this, SecondActivity.class ) );
overridePendingTransition( R.anim.slide_in_left, R.anim.slide_out_left );
}
});
}
@Override
public boolean onKeyUp( int keyCode, KeyEvent event )
{
if( keyCode == KeyEvent.KEYCODE_BACK )
{
finish();
return true;
}
return super.onKeyUp( keyCode, event );
}
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.next:
startActivity( new Intent( FirstActivity.this, SecondActivity.class ) );
overridePendingTransition( R.anim.slide_in_left, R.anim.slide_out_left );
return true;
case R.id.exit:
finish();
default:
return super.onOptionsItemSelected(item);
}
}
}
SecondActivity.java
package com.stylingandroid.Animation;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
public class SecondActivity extends Activity
{
private ImageButton nextbutton;
private ImageButton backbutton;
@Override
protected void onCreate( Bundle savedInstanceState )
{
super.onCreate( savedInstanceState );
setContentView( R.layout.second );
nextbutton = (ImageButton) findViewById(R.id.NextButton);
backbutton = (ImageButton) findViewById(R.id.BackButton);
nextbutton.setOnClickListener( new OnClickListener()
{
@Override
public void onClick( View v )
{
startActivity( new Intent( SecondActivity.this, ThirdActivity.class ) );
overridePendingTransition( R.anim.slide_in_left, R.anim.slide_out_left );
}
});
backbutton.setOnClickListener( new OnClickListener()
{
@Override
public void onClick( View v )
{
finish();
startActivity( new Intent( SecondActivity.this, FirstActivity.class ) );
overridePendingTransition( R.anim.slide_in_right, R.anim.slide_out_right );
}
});
}
@Override
public boolean onKeyUp( int keyCode, KeyEvent event )
{
if( keyCode == KeyEvent.KEYCODE_BACK )
{
finish();
overridePendingTransition( R.anim.slide_in_right, R.anim.slide_out_right );
return true;
}
return super.onKeyUp( keyCode, event );
}
}
ThirdActivity.java
package com.stylingandroid.Animation;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;
public class ThirdActivity extends Activity
{
@Override
protected void onCreate( Bundle savedInstanceState )
{
super.onCreate( savedInstanceState );
setContentView( R.layout.third );
((ImageButton)findViewById( R.id.BackButton )).setOnClickListener( new OnClickListener()
{
@Override
public void onClick( View v )
{
goBack();
}
});
}
private void goBack()
{
finish();
overridePendingTransition( R.anim.slide_in_right, R.anim.slide_out_right );
}
@Override
public boolean onKeyUp( int keyCode, KeyEvent event )
{
if( keyCode == KeyEvent.KEYCODE_BACK )
{
goBack();
return true;
}
return super.onKeyUp( keyCode, event );
}
}
最佳答案
这里有一个错误:
backbutton.setOnClickListener( new OnClickListener()
{
@Override
public void onClick( View v )
{
finish();
startActivity( new Intent( SecondActivity.this, FirstActivity.class ) );
overridePendingTransition( R.anim.slide_in_right, R.anim.slide_out_right );
}
});
您正在 finish()
ing 和 startActivity()
ing FirstActivity,因此它两次位于 Activity 堆栈上。
顺便说一句,您想在这里实现什么目标?
@Override
public boolean onKeyUp( int keyCode, KeyEvent event )
{
if( keyCode == KeyEvent.KEYCODE_BACK )
{
goBack();
return true;
}
return super.onKeyUp( keyCode, event );
}
系统将后退按钮附加到finish()
。您不需要在 onKey 级别处理它。
关于java - Android中KeyEvent.KEYCODE_BACK的疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6958548/