当我运行此void时,活动将重新启动,而是需要打开对话框。
无效:
AlertDialog.Builder mBuilder = new AlertDialog.Builder(Settings.this);
View mView = getLayoutInflater().inflate(R.layout.dialog_wedit, null);
mBuilder.setView(mView);
mBuilder.setTitle("Wilma custom URL");
mBuilder.setIcon(R.drawable.ic_wilma);
final Spinner mSpinner = mView.findViewById(R.id.editor_netprotocol); //Using mView because it doesn't exist in the main layout, but only in the custom layout (same under this line)
final Spinner mSpinner_mode = mView.findViewById(R.id.spinner_mode);
final EditText mEdittext = mView.findViewById(R.id.editor_url);
final String[] selects = new String[]{"https://", "http://"
};
final String[] selects2 = new String[]{"Default URL", "Custom URL"
};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(context,
android.R.layout.simple_spinner_item, selects);
ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(context,
android.R.layout.simple_spinner_item, selects2);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mSpinner.setAdapter(adapter);
mSpinner_mode.setAdapter(adapter2);
final Boolean[] url_mode = {false};
SharedPreferences prefs = getSharedPreferences(getString(R.string.preference_file_key), MODE_PRIVATE);
Boolean url_mode_saved = prefs.getBoolean("wilmacustom", false);
if (url_mode_saved) {
mSpinner_mode.setSelection(2);
url_mode[0] = true;
} else {
mSpinner_mode.setSelection(1);
url_mode[0] = false;
}
final String[] url_protocol_selection = new String[1];
mSpinner_mode.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (position) {
case 1:
url_mode[0] = false;
break;
case 2:
url_mode[0] = true;
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
url_protocol_selection[0] = mSpinner.getSelectedItem().toString();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
mBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
mBuilder.setPositiveButton("Apply", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String finalURL = url_protocol_selection[0] + mEdittext.getText().toString();
SharedPreferences.Editor editor = getSharedPreferences(getString(R.string.preference_file_key), MODE_PRIVATE).edit();
editor.putString("wilmaurl", finalURL);
editor.putBoolean("wilmacustom", url_mode[0]);
editor.apply();
dialog.dismiss();
}
});
mBuilder.show();
对话框布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="20dp">
<Spinner
android:id="@+id/spinner_mode"
android:layout_width="348dp"
android:layout_height="40dp" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/layout_editor">
<Spinner
android:id="@+id/editor_netprotocol"
android:layout_width="143dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textUri"
android:hint="wilma.kunta.fi"
android:id="@+id/editor_url"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>
日志:
07-25 21:21:12.513 6403-6403/com.developerfromjokela.edison E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.developerfromjokela.edison, PID: 6403
java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
at java.util.Arrays$ArrayList.get(Arrays.java:3769)
at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:385)
at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:441)
at android.widget.ArrayAdapter.getView(ArrayAdapter.java:407)
at android.widget.Spinner.makeView(Spinner.java:712)
at android.widget.Spinner.layout(Spinner.java:660)
at android.widget.Spinner.onLayout(Spinner.java:622)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.support.v7.widget.AlertDialogLayout.setChildFrame(AlertDialogLayout.java:347)
at android.support.v7.widget.AlertDialogLayout.onLayout(AlertDialogLayout.java:340)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at com.android.internal.policy.DecorView.onLayout(DecorView.java:761)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2511)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2227)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1407)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6783)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:924)
at android.view.Choreographer.doCallbacks(Choreographer.java:736)
at android.view.Choreographer.doFrame(Choreographer.java:671)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:910)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6499)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:440)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
07-25 21:21:12.513 6403-6403/com.developerfromjokela.edison E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.developerfromjokela.edison, PID: 6403
java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
at java.util.Arrays$ArrayList.get(Arrays.java:3769)
at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:385)
at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:441)
at android.widget.ArrayAdapter.getView(ArrayAdapter.java:407)
at android.widget.Spinner.makeView(Spinner.java:712)
at android.widget.Spinner.layout(Spinner.java:660)
at android.widget.Spinner.onLayout(Spinner.java:622)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.support.v7.widget.AlertDialogLayout.setChildFrame(AlertDialogLayout.java:347)
at android.support.v7.widget.AlertDialogLayout.onLayout(AlertDialogLayout.java:340)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at com.android.internal.policy.DecorView.onLayout(DecorView.java:761)
at android.view.View.layout(View.java:19659)
at android.view.ViewGroup.layout(ViewGroup.java:6075)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2511)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2227)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1407)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6783)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:924)
at android.view.Choreographer.doCallbacks(Choreographer.java:736)
at android.view.Choreographer.doFrame(Choreographer.java:671)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:910)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6499)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:440)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
该应用程序将显示带有2个微调框和一个编辑文本的对话框。使用一个微调器,对话框可以正常工作,而当我添加第二个微调器时,对话框将无法打开。
我无法理解它为什么崩溃。如果有人可以帮助我,非常感谢他。
答案 0 :(得分:1)
看看您的堆栈跟踪的这一部分:
null
这意味着您的应用程序崩溃,因为您试图在Spinner元素中选择一个不存在的元素。请记住,微调器中列出的所有项目的索引都为0。
07-25 21:21:12.513 6403-6403/com.developerfromjokela.edison E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.developerfromjokela.edison, PID: 6403
java.lang.ArrayIndexOutOfBoundsException: length=2; index=2