2014-11-07 2 views
0

Я использую this tutorial для создания настраиваемого диалогового окна, которое должно отображаться при нажатии кнопки «Создать новую папку» из счетчика. Я попал внутрь метода OnItemsSelected, я установил опцию «Создать новую папку», а затем я хочу показать диалог, чтобы ввести имя новой папки. Я делаю это так:Пользовательский диалог, setContentView throws ResourceNotFoundException

Рез/макет/dialog.html

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/dialog" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:visibility="visible" > 

<EditText 
    android:id="@+id/editText_dialog" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:hint="@string/editText_dialog" 
    android:layout_alignParentTop="true" 
    android:layout_marginTop="15dip" 
    android:layout_marginBottom="15dip"/> 

<Button 
    android:id="@+id/button_create_dialog" 
    android:text="@string/button_create_dialog" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/editText_dialog" 
    android:layout_alignParentLeft="true" 
    android:layout_marginLeft="50dip" 
    android:background="#176CEC" 
    android:textColor="#fff" 
    android:textStyle="bold" 
    android:textAppearance="?android:attr/textAppearanceLarge"/> 

<Button 
    android:id="@+id/button_cancel_dialog" 
    android:text="@string/button_cancel_dialog" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/editText_dialog" 
    android:layout_alignParentRight="true" 
    android:layout_marginRight="50dip" 
    android:background="#176CEC" 
    android:textColor="#fff" 
    android:textStyle="bold" 
    android:textAppearance="?android:attr/textAppearanceLarge"/> 

</RelativeLayout> 

Java Файл

public void onItemSelected(AdapterView<?> parent, View view, int position,long id){ 
    if (parent.getItemAtPosition(position).toString().matches("Create New Folder")){ 
     final Dialog dialog = new Dialog(this); 
     try { 
      dialog.setContentView(R.id.dialog); 
      dialog.setTitle("Create New Folder"); 
     } 
     catch (Exception e){ 
      StringWriter errors = new StringWriter(); 
      e.printStackTrace(new PrintWriter(errors)); 
      Log.i("Exception", errors.toString()); 
     } 


     Button createButton = (Button) findViewById(R.id.button_create_dialog); 
     Button cancelButton = (Button) findViewById(R.id.button_cancel_dialog); 

     createButton.setOnClickListener(new Button.OnClickListener(){ 
      public void onClick(View v){ 
       EditText newFolderName = (EditText) findViewById(R.id.editText_dialog); 
       String folderName = newFolderName.getText().toString().trim(); 
       if (folderName.length() > 0) { 
        // do stuff 
        dialog.dismiss(); 
       } 
      } 
     }); 

     cancelButton.setOnClickListener(new Button.OnClickListener(){ 
      public void onClick(View v){ 
       dialog.dismiss(); 
      } 
     }); 
     dialog.show(); 
    } 
} 

Я получаю ResourceNotFoundException. Это StackTrace:

11-07 17:11:49.075: I/Exception(8315): android.content.res.Resources$NotFoundException: Resource ID #0x7f05000e 
11-07 17:11:49.075: I/Exception(8315): at android.content.res.Resources.getValue(Resources.java:1118) 
11-07 17:11:49.075: I/Exception(8315): at android.content.res.Resources.loadXmlResourceParser(Resources.java:2304) 
11-07 17:11:49.075: I/Exception(8315): at android.content.res.Resources.getLayout(Resources.java:934) 
11-07 17:11:49.075: I/Exception(8315): at android.view.LayoutInflater.inflate(LayoutInflater.java:395) 
11-07 17:11:49.075: I/Exception(8315): at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
11-07 17:11:49.075: I/Exception(8315): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:267) 
11-07 17:11:49.075: I/Exception(8315): at android.app.Dialog.setContentView(Dialog.java:471) 
11-07 17:11:49.075: I/Exception(8315): at com.example.example.MainActivity.onItemSelected(MainActivity.java:94) 
11-07 17:11:49.075: I/Exception(8315): at android.widget.AdapterView.fireOnSelected(AdapterView.java:892) 
11-07 17:11:49.075: I/Exception(8315): at android.widget.AdapterView.access$200(AdapterView.java:49) 
11-07 17:11:49.075: I/Exception(8315): at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:860) 
11-07 17:11:49.075: I/Exception(8315): at android.os.Handler.handleCallback(Handler.java:730) 
11-07 17:11:49.075: I/Exception(8315): at android.os.Handler.dispatchMessage(Handler.java:92) 
11-07 17:11:49.075: I/Exception(8315): at android.os.Looper.loop(Looper.java:137) 
11-07 17:11:49.075: I/Exception(8315): at android.app.ActivityThread.main(ActivityThread.java:5103) 
11-07 17:11:49.075: I/Exception(8315): at java.lang.reflect.Method.invokeNative(Native Method) 
11-07 17:11:49.075: I/Exception(8315): at java.lang.reflect.Method.invoke(Method.java:525) 
11-07 17:11:49.075: I/Exception(8315): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
11-07 17:11:49.075: I/Exception(8315): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
11-07 17:11:49.075: I/Exception(8315): at dalvik.system.NativeStart.main(Native Method) 

Как вы можете себе представить, ресурс ID # 0x7f05000e соответствует R.id.dialog, я проверил:

внутри R.java

public static final int dialog = 0x7f05000e; 

Любая идея, в чем проблема?

UPDATE Я забыл сказать, что исключение в этой строке:

dialog.setContentView(R.id.dialog); 

ответ

1

Эта ошибка возникает потому, что вы пытаетесь сделать findViewById на view(s) что не существует в Activity, но существует в ваш диалог.

Изменить этот код:

Button createButton = (Button) findViewById(R.id.button_create_dialog); 
    Button cancelButton = (Button) findViewById(R.id.button_cancel_dialog); 

To:

Button createButton = (Button) dialog.findViewById(R.id.button_create_dialog); 
    Button cancelButton = (Button) dialog.findViewById(R.id.button_cancel_dialog); 

Эти кнопки не в Activity, так что вы косяк просто позвоните findViewById, потому что он будет пытаться найти button's идентификатор в XML-файл Activity's. Вместо этого позвоните dialog.findViewById, чтобы сообщить код, чтобы найти button в вашем диалоговом окне.

UPDATE (извините не код тега, я не обновлять с телефона)

Вы должны использовать R.layout.dialog вместо R.id.dialog в методе setContentView.

+0

Я ценю ваш ответ, потому что я уверен, что столкнулся бы с этой проблемой позже. Я собираюсь отредактировать/обновить свой вопрос, я забыл сказать, что получил исключение в строке «dialog.setContentView (R.id.dialog)»; – Fernando

+0

Спасибо :) Я думаю, это должно быть R.layout.dialog –

+0

О, мальчик, иногда я чувствую себя смущенным из-за тех вопросов, которые я задаю. Ну, я всегда могу сказать, что я молод и все еще небрежен: S – Fernando

 Смежные вопросы

  • Нет связанных вопросов^_^