— This may be a non-issue — I am unable to reproduce this now w/ the device after fixing it and trying to revert back.
So I am a little confused, but here is some code. I changed up the code to simplify it some, so I may have a typo, but this is the ‘gist’ of what I am seeing. But basically on some devices example 1 won’t launch a dialog, while option 2 launches it on all devices:
- why the difference in devices/android versions?
- should the context not be the same? I know Application Context & View context are different. But not sure why this should work. I know I should not be using
getApplicationContext()for a view.. But still a little confused.
(Please note MyTestActivity is a subclass of MyActivity)
Edit: In option #1 the MyActivity gets the Context from a class variable and uses that to launch the dialog.
In option #2 MyTestActivity gets the context (should be same context as MyActivity?) and passes that into the showMessage. (showMessage takes a new parameter in example #2)
Example #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();
}
}
And example #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();
}
}
The answer is simple. If you don’t call
super.onCreate(savedInstanceState);in your overridenonCreate()you get a garbage instead ofcontext. If you callsuper.onCreate(savedInstanceState);, you get a workingcontext.