2012-11-12 3 views
0

У меня есть внутренний класс для создания и отображения простого диалогового окна.Список фрагментов диалога - Не удается найти ресурс

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" 
/> 

Приложение взрывается где-то в глубинах Inflater ресурсов на линии

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) 

ресурсов идентификатор определяется в качестве R.java

 public static final int simpleListItem=0x7f040052 

(т.е. TextView, указанный в файле simple_list.xml выше)

Кто-нибудь может понять, что не так? В данный момент я почесываю голову.

Благодаря

Эндрю

ответ

3

Посмотрите документацию для конкретного ArrayAdapter конструктора вы звоните:

public ArrayAdapter (Context context, int textViewResourceId, List<T> objects) 

В частности, это объясняет, второй параметр параметра:

textViewResourceId - resou rce ID для макета файл, содержащий TextView для использования при создании экземпляров.

Другими словами, в настоящее время вы используете неправильный идентификатор (это также говорит об ошибке LogCat). Вместо того, чтобы указывать идентификатор TextView в файле макета, вы должны указать идентификатор файла макета. Подумайте об этом: как бы 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 отличается от различных конструкторов.

+0

Top ответ - спасибо в ответ. Я прихожу к этому с iPhone, и кривая обучения крутая - в основном потому, что есть так много, чтобы окунуться! – drew

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; 
Смежные вопросы