我是Android开发的新手。我正在关注此link以创建警报对话框。 但我在
收到NoClassDefFound错误 newFragment.show(getFragmentManager(), "dialog");
编辑:Stacktrace
04-19 06:40:08.640:E / AndroidRuntime(1656):致命异常:主要 04-19 06:40:08.640:E / AndroidRuntime(1656): java.lang.NoClassDefFoundError: org.poovelil.gpstest.MainActivity $ MyAlertDialogFragment 04-19 06:40:08.640:E / AndroidRuntime(1656):at org.poovelil.gpstest.MainActivity.onCreate(MainActivity.java:37)04-19 06:40:08.640:E / AndroidRuntime(1656):at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072) 04-19 06:40:08.640:E / AndroidRuntime(1656):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1836) 04-19 06:40:08.640:E / AndroidRuntime(1656):at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1893) 04-19 06:40:08.640:E / AndroidRuntime(1656):at android.app.ActivityThread.access $ 1500(ActivityThread.java:135)04-19 06:40:08.640:E / AndroidRuntime(1656):at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1054) 04-19 06:40:08.640:E / AndroidRuntime(1656):at android.os.Handler.dispatchMessage(Handler.java:99)04-19 06:40:08.640:E / AndroidRuntime(1656):at android.os.Looper.loop(Looper.java:150)04-19 06:40:08.640: E / AndroidRuntime(1656):at android.app.ActivityThread.main(ActivityThread.java:4389)04-19 06:40:08.640:E / AndroidRuntime(1656):at java.lang.reflect.Method.invokeNative(Native Method)04-19 06:40:08.640:E / AndroidRuntime(1656):at java.lang.reflect.Method.invoke(Method.java:507)04-19 06:40:08.640: E / AndroidRuntime(1656):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:849) 04-19 06:40:08.640:E / AndroidRuntime(1656):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)04-19 06:40:08.640:E / AndroidRuntime(1656):at dalvik.system.NativeStart.main(原生方法)
我的代码如下。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
boolean gpsOn = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
boolean networkOn = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if(!gpsOn) {
Toast.makeText(getApplicationContext(), "GPS Provider is off", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "GPS Provider is on", Toast.LENGTH_SHORT).show();
}
if(!networkOn) {
Toast.makeText(getApplicationContext(), "Network provider is off", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "Network provider is on", Toast.LENGTH_LONG).show();
}
if(!networkOn || !gpsOn) {
DialogFragment newFragment = MyAlertDialogFragment.newInstance(1);
newFragment.show(getFragmentManager(), "dialog");
//startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public static class MyAlertDialogFragment extends DialogFragment {
public static MyAlertDialogFragment newInstance(int title) {
MyAlertDialogFragment frag = new MyAlertDialogFragment();
Bundle args = new Bundle();
args.putInt("title", title);
frag.setArguments(args);
return frag;
}
public Dialog onCreateDialog(Bundle savedInstanceState) {
int title = getArguments().getInt("title");
return new AlertDialog.Builder(getActivity())
//.setIcon(R.drawable.alert_dialog_icon)
.setTitle(title)
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
//((FragmentAlertDialog) getActivity()).doPositiveClick();
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
}
})
.create();
}
}
答案 0 :(得分:1)
NoClassDefFound错误让我相信您正在使用pre-HC设备,这意味着它没有对Fragments的原生支持。您将需要使用android支持库并使用FragmentActivity的getSupportFragmentManager()
代替。
答案 1 :(得分:1)
如果您使用minSdk=8
添加支持库是不够的。你应该相应地使用片段内容,在你的情况下:
android.support.v4.app.DialogFragment
android.support.v4.app.FragmentActivity
FragmentManager
android.support.v4.app.FragmentActivity.getSupportFragmentManager()
实例
答案 2 :(得分:0)
您需要先将对话框添加到FramgmentManager中:
FragmentManager fm = getFragmentManager();
DialogFragment newFragment = null;
final FragmentTransaction transaction = fm.beginTransaction();
newFragment = (DialogFragment)fm.findFragmentByTag("dialog");
if (newFragment == null) {
newFragment = MyAlertDialogFragment.newInstance(1)
transaction.add(0x11313123, newFragment, "dialog");
}
newFragment.show(getFragmentManager(), "dialog");
}