-- これは問題ではない可能性があります -- 修正して元に戻そうとした後、デバイスでこれを再現することはできません。
だから私は少し混乱していますが、ここにいくつかのコードがあります。コードを少し簡略化するために変更したため、タイプミスがある可能性がありますが、これは私が見ているものの「要点」です。ただし、基本的に一部のデバイスでは、例 1 ではダイアログが起動されませんが、オプション 2 ではすべてのデバイスでダイアログが起動されます。
- デバイス/Android バージョンの違いはなぜですか?
- 文脈は同じではないでしょうか?アプリケーションコンテキストとビューコンテキストが異なることは知っています。しかし、なぜこれが機能するのかわかりません。ビューに使用すべきではないことはわかって
getApplicationContext()
います..しかし、まだ少し混乱しています。
(MyTestActivity は MyActivity のサブクラスであることに注意してください)
編集: オプション #1 では、MyActivity はクラス変数から Context を取得し、それを使用してダイアログを起動します。オプション #2 では、MyTestActivity がコンテキストを取得し (MyActivity と同じコンテキストである必要がありますか?)、それを showMessage に渡します。(showMessage は、例 #2 の新しいパラメーターを取ります)
例 #1
///////////////////////////////////////////
// THIS Example works on Galaxy Nexus, but not on some other devices, such as :
// SAMSUNG-SGH-I997. (infuse) - this just simply does not display anything.
public class MyTestActivity extends MyActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout);
Intent i = new Intent(MyTestActivity.this, ActivityTwo.class);
startActivityForResult(i, Constants.FROM_ACTIVITY);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
IntentResult intentResult = IntentIntegrator.parseActivityResult(requestCode,
resultCode, data);
if ((intentResult != null) && (resultCode == RESULT_OK)) {
playsound(SOUND_DING); // User hears this - SoundPool
showMessage("Test Title","Test Message"); // User does not see message
}
}
}
public class MyActivity extends Activity {
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext=this;
}
public void showMessage(String title, String message) {
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setTitle(title);
builder.setMessage(message)
.setPositiveButton(mContext.getString(R.string.ok),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish();
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
そして例#2
/////////////////////////////////////////////////////////////
// This works on all devices
public class MyTestActivity extends MyActivity {
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout);
context = this;
Intent i = new Intent(MyTestActivity.this, ActivityTwo.class);
startActivityForResult(i, Constants.FROM_ACTIVITY);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
IntentResult intentResult = IntentIntegrator.parseActivityResult(requestCode,
resultCode, data);
if ((intentResult != null) && (resultCode == RESULT_OK)) {
playsound(SOUND_DING); // user hears this
showMessage("Test Title","Test Message", context); // user sees this
}
}
}
public class MyActivity extends Activity {
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext=this;
}
public void showMessage(String title, String message, Context context) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(title);
builder.setMessage(message)
.setPositiveButton(context.getString(R.string.ok),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish();
}
});
AlertDialog alert = builder.create();
alert.show();
}
}