Java 在Android中使用KeyEvent.KEYCODE_表示怀疑
我有三项活动。 第一个活动有一个“向右”图像按钮。(移动到第二个活动) 第二个活动同时具有“向右”和“向左”图像按钮。(返回到第一个活动或移动到第三个活动)。第三项活动有一个“向左”按钮,可移动到第二项活动。 我已经为后退键创建了事件 问题是, 您从第一个导航到第三个,然后返回并导航到第三个活动。 第一个活动---点击向右----第二个活动---点击向右----第三个活动---点击向左----第二个活动----点击向左----第一个活动----点击向右----第二个活动---点击向右----第三个活动 现在,如果我在第三个活动中按back键,它将移动到第二个。按下这里的“后退”键,它将移动到第一位。但在这里,如果我按下后退键,它会再次进入第一个活动。只有在第一个活动中按第二个后退键才能退出应用程序。另外一个问题是,如何使Imagebutton仅在按下时可见 我说得通吗 FirstActivity.javaJava 在Android中使用KeyEvent.KEYCODE_表示怀疑,java,android,keyevent,keycode,onkeyup,Java,Android,Keyevent,Keycode,Onkeyup,我有三项活动。 第一个活动有一个“向右”图像按钮。(移动到第二个活动) 第二个活动同时具有“向右”和“向左”图像按钮。(返回到第一个活动或移动到第三个活动)。第三项活动有一个“向左”按钮,可移动到第二项活动。 我已经为后退键创建了事件 问题是, 您从第一个导航到第三个,然后返回并导航到第三个活动。 第一个活动---点击向右----第二个活动---点击向右----第三个活动---点击向左----第二个活动----点击向左----第一个活动----点击向右----第二个活动---点击向右----第三
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);
}
}
}
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 );
}
}
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 );
}
}
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.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);
}
}
}
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 );
}
}
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 );
}
}
ThirdActivity.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);
}
}
}
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 );
}
}
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 );
}
}
这里有一个bug:
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()
另一方面,你想在这里实现什么
@Override
public boolean onKeyUp( int keyCode, KeyEvent event )
{
if( keyCode == KeyEvent.KEYCODE_BACK )
{
goBack();
return true;
}
return super.onKeyUp( keyCode, event );
}
系统将后退按钮连接到finish()
。您不需要在onKey级别处理它。除了不同的布局外,每个活动都是相同的吗?您是否考虑过使用新兼容性库中的ViewPager?啊!!他们是一样的!我只是在尝试一些动画!我不知道viewpager。我要试试看!谢谢如果我注释掉finish(),第二个活动会弹出,即使我在第一个活动中。我知道系统会将back按钮附加到finish()。但这一转变并不顺利。为了使动画平滑,我使用了goBack();不要注释掉完成,而是注释掉开始活动