2

私は3つの活動をしています。1 つ目のアクティビティには、「右に進む」イメージ ボタンがあります。(2 つ目のアクティビティに移動) 2 つ目のアクティビティには、「右に移動」と「左に移動」の両方のイメージ ボタンがあります。(最初のアクティビティに戻るか、3 番目のアクティビティに移動します)。3 番目のアクティビティには、2 番目のアクティビティに移動するための「左に移動」ボタンがあります。そして、戻るキーを押すためのイベントを作成しました。

問題は、1 番目から 3 番目のアクティビティに移動し、戻ってきてから 3 番目のアクティビティに移動することです。1 つ目のアクティビティ --- クリックすると右に移動----> 2 つ目のアクティビティ --- クリックすると右に移動-----> 3 つ目のアクティビティ --- クリックすると左に移動----> 2 つ目のアクティビティ----クリックすると左に移動- ---> 1 番目のアクティビティ----クリックして右に移動----> 2 番目のアクティビティ---クリックして右に移動-----> 3 番目のアクティビティ。

3番目のアクティビティで戻るキーを押すと、2番目に移動します。ここでバックキーを押すと1stに移動します。しかし、ここで戻るキーを押すと、最初のアクティビティに戻ります。最初のアクティビティで 2 回目の戻るキーを押すだけで、アプリケーションが終了します。追加の質問は、Imagebutton を押した場合にのみ表示する方法です。

私は何か意味がありますか?

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

1 に答える 1

2

ここにバグがあります:

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

FirstActivity を ing および ing しているため、Activity スタックに 2 回置かれていますfinish()startActivity()

余談ですが、ここで何を達成しようとしていますか?

@Override
public boolean onKeyUp( int keyCode, KeyEvent event )
{
    if( keyCode == KeyEvent.KEYCODE_BACK )
    {
        goBack();
        return true;
    }
    return super.onKeyUp( keyCode, event );
}

システムは、戻るボタンを にアタッチしますfinish()。onKey レベルで処理する必要はありません。

于 2011-08-05T15:20:11.873 に答える