1

この問題の解決策は非常に簡単でした:

残念ながら、私はどういうわけか自分のコードでこれを間違ってコメントしました。おそらくどこかからコピーしたのでしょう:

public void onUserLeaveHint() { // this only executes when Home is selected.
        if(started){
            started=false;
            recordTask.cancel(true);
            }
            this.finish();
            super.onUserLeaveHint();
        }
    }
}

それはAPIからのものです:

ユーザーの選択の結果、アクティビティがバックグラウンドに移行しようとしているときに、アクティビティ ライフサイクルの一部として呼び出されます。

そのため、新しいアクティビティが開始されるたびに、メインはバックグラウンドで終了しました。

とにかく助けてくれてありがとう。私の愚かな過ちは、単にその方法を忘れていました。問題が解決しました。

元の質問:

2 番目のアクティビティのコードを減らして、今のところ結果のみを返すようにしました。これは次のようになります。(2 番目のアクティビティは、コード全体のコメントを外すと機能します。これは単なるファイル エクスプローラーであり、文字列のパスが返されます。デバッグのために、機能するようになるまでこれを使用します。) 両方のアクティビティがマニフェストで宣言されています。

public class AndroidExplorer extends ListActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.olddata);

        Intent sender=getIntent();
        Intent intent=new Intent();
        intent.putExtra("ComingFrom", "Hello");
        setResult(Activity.RESULT_OK, intent);
        AndroidExplorer.this.finish();
    }
}

これは、次の方法で最初のアクティビティから呼び出されます。

Intent intent;
intent = new Intent(firstactivity.this,AndroidExplorer.class);
firstactivity.this.startActivityForResult(intent,0);

結果は次のように受け取る必要があります。

@Override
    public void onActivityResult(int requestCode,int resultCode,Intent data)
    {
     super.onActivityResult(requestCode, resultCode, data);

     String extraData=data.getStringExtra("ComingFrom");
     Log.e("result", extraData);
     go2startscreen();
    }

残念ながら、最初のアクティビティに戻ることはなく、アプリを閉じるだけです。

エラーログ:

04-26 11:11:14.096: D/memalloc(32383): /dev/pmem: Mapped buffer base:0x51b3e000 size:17645568 offset:15556608 fd:53
04-26 11:11:32.264: D/memalloc(32383): /dev/pmem: Mapped buffer base:0x52e66000 size:3686400 offset:1597440 fd:59
04-26 11:11:32.584: D/memalloc(32383): /dev/pmem: Unmapping buffer base:0x51b3e000 size:17645568 offset:15556608
04-26 11:11:32.584: D/memalloc(32383): /dev/pmem: Unmapping buffer base:0x52e66000 size:3686400 offset:1597440
04-26 11:11:32.644: W/IInputConnectionWrapper(32383): showStatusIcon on inactive InputConnection
04-26 11:11:32.644: W/IInputConnectionWrapper(32383): InputConnection = android.view.inputmethod.BaseInputConnection@40d9ddd0, active client = false

go2startscreen 関数は次のとおりです。

void go2startscreen(){
        setContentView(R.layout.startscreen);
        appPosition = "startscreen";
        newRecord = (Button) this.findViewById(R.id.newRecord);
        newRecord.setOnClickListener(this);
}

したがって、R.layout.startscreen で終了する必要があります。最初のアクティビティから呼び出すと、go2startscreen の呼び出しが機能します。

4

1 に答える 1

1

resultCodeをチェックして、問題がない場合は、次のように実行します。

@Override
   public void onActivityResult(int requestCode,int resultCode,Intent data)
   {
    super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK){
    String extraData=data.getStringExtra("ComingFrom");
    Log.e("result", extraData);
   go2startscreen();
    }
  }

それがあなたを助けることを願っています。

于 2012-04-26T09:19:35.540 に答える