我有一个内部类来创建和显示一个简单的列表对话框。
private static class DisplayListDialogFragment extends DialogFragment
{
List<String> list;
OnClickListener clickListener;
private static DisplayListDialogFragment newInstance(List<String> list, String title, OnClickListener clickListener)
{
DisplayListDialogFragment dldf = new DisplayListDialogFragment();
dldf.list = (List<String>)list;
dldf.clickListener = clickListener;
Bundle bundle = new Bundle();
bundle.putString("title", title);
dldf.setArguments(bundle);
return dldf;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
ArrayAdapter<String> ad = new ArrayAdapter<String>(getActivity(), R.id.simpleListItem, this.list);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string._select_display)
.setSingleChoiceItems(ad, 1, this.clickListener);
return builder.create();
}
}
引用的资源在字符串文件
中声明 <string name="_select_display">Select Display</string>
和一个名为simple_list.xml的小文件
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/simpleListItem"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:textAppearance="?android:attr/textAppearanceMedium"
/>
该应用程序在该行
的资源不足深处某处爆炸return builder.create();
堆栈跟踪
11-12 17:21:01.664: E/AndroidRuntime(1335): android.content.res.Resources$NotFoundException: Resource ID #0x7f040052 type #0x12 is not valid
11-12 17:21:01.664: E/AndroidRuntime(1335): at android.content.res.Resources.loadXmlResourceParser(Resources.java:1874)
11-12 17:21:01.664: E/AndroidRuntime(1335): at android.content.res.Resources.getLayout(Resources.java:731)
11-12 17:21:01.664: E/AndroidRuntime(1335): at android.view.LayoutInflater.inflate(LayoutInflater.java:318)
11-12 17:21:01.664: E/AndroidRuntime(1335): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:332)
11-12 17:21:01.664: E/AndroidRuntime(1335): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
资源ID在R.java中定义为
public static final int simpleListItem=0x7f040052
(即上面的simple_list.xml文件中声明的TextView)
有人能看出什么问题吗?我此刻正在挠头。
由于
安德鲁
答案 0 :(得分:3)
查看您正在调用的特定ArrayAdapter
构造函数的文档:
public ArrayAdapter (Context context, int textViewResourceId, List<T> objects)
特别是,它解释了第二个参数参数:
textViewResourceId - 包含要在实例化视图时使用的TextView的布局文件的资源ID。
换句话说,您当前正在传递错误的ID类型(这也是LogCat错误所说的)。您应该提供布局文件的ID,而不是在布局文件中提供TextView
ID。想一想:如果您没有提及布局,Android会如何知道从TextView
充气的位置?
将ArrayAdapter
更改为:
ArrayAdapter<String> ad = new ArrayAdapter<String>(getActivity(), R.layout.simple_list, this.list);
或者,传递布局和 TextView
ID:
ArrayAdapter<String> ad = new ArrayAdapter<String>(getActivity(), R.layout.simple_list, R.id.simpleListItem, this.list);
PS:我同意文档可能会引起一些混淆,因为textViewResourceId
参数的含义因各种构造函数而异。
答案 1 :(得分:0)
简单代码:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Title");
.setItems(R.array.colors_array, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// The 'which' argument contains the index position
// of the selected item
}
});
return builder.create().show;