私はButton
、それぞれが同じをアタッチしている複数のオブジェクトのセットを提供するインターフェースに取り組んでいますOnClickListener
。上記のsがクリックされると、で指定されているように、Button
が起動するはずです。Activity
onClick
参考までに私のコードは次のとおりです。
public class Calcs extends SherlockFragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// ...
CalcLoader buttonListener = new CalcLoader(getActivity());
LinearLayout buttons = (LinearLayout) v.findViewById(R.id.calculatorlist); // v is the inflated View
for (int i = 0; i < buttons.getChildCount(); i++) {
View b = buttons.getChildAt(i);
if (b instanceof Button) {
((Button) b).setOnClickListener(buttonListener);
}
}
// Test Code: Location 1
Intent i = new Intent(getActivity(), MyCalcActivity.class);
getActivity().startActivity(i);
// ...
}
private class CalcLoader implements OnClickListener {
private Activity mOwner;
public CalcLoader(Activity owner) {
mOwner = owner;
// Test Code: Location 2
Intent i = new Intent(mOwner, MyCalcActivity.class);
mOwner.startActivity(i);
}
public void onClick(View v) {
if (v instanceof Button) {
// Actual Code: Location 3
Intent i = new Intent(mOwner, MyCalcActivity.class);
mOwner.startActivity(i);
}
}
}
}
それにもかかわらず、私はいくつかの奇妙な振る舞いをしています。startActivity
上記のコードでは、場所1と2のラベルが付いたいくつかのテストを配置しました。どちらの場合も、Activity
正しく起動し、すべてが順調です。
ただし、作業コードを実行する必要がある場所3では、起動されたコードから奇妙な動作が発生しActivity
ます。
- 最初は、
Activity
正常に起動されます。単一のテキストフィールドが表示され、フォーカスされ、ソフトキーボードが表示されます。正解です。 - ここで、戻るボタンをクリックすると、キーボードが閉じます。正解です。
- もう一度クリックすると、フィールドのフォーカスが失われます。これは起こらないはずです。代わりに、
Activity
閉じて前のものに戻る必要があります。 - もう一度クリックすると、アプリ全体が閉じます(前に戻るのではなく
Activity
)。明らかに、これは起こらないはずです。
繰り返しになりActivity
ますが、ロケーション1または2から開始すると、すべてが正しく機能します。バックスタックは正しく、正しく初期スタックに戻りActivity
ます。
ここで何が問題になっていますか?なぜ、Activity
から開始onClick
すると、他の場所からは機能するのに失敗するのですか?
更新:Intent
コンストラクターに保存してメソッドで再利用すると、UIスレッドからonClick
開始する場合と同じグリッチの結果が生成されます。Activity
2番目の更新:テキストフィールドのフォーカスを解除しても、グリッチには影響しませんでした。戻るボタンはまだアプリを閉じていました。さらに、2.3.3エミュレーターで実行しても同じ結果になりました。ただし、奇妙なことに、2番目の戻るボタンを押した後(テキストフィールドがフォーカスを失った)、約3秒待つと、Activity
閉じてメインのボタンに戻ります。
3番目の更新:テキストフィールドからフォーカスを取得する戻るボタンに対して、キーイベント(onKeyDown
または)は発生しません。onBackPressed
さらに、Activity
テキストフィールドがフォーカスを失った後に操作するとActivity
、同じタイプの新しいものをロードするアニメーションが表示されますが、ここにもグリッチがあります。
これは、Android 2.2(API 8)、2.3.1(API 9)、および2.3.3(API 10)で見られるOSレベルの問題のようです。Eclair(API 7)、およびAPI11以降にはこの問題はありません。この時点で、私はある種の回避策を探していると思います...