Счетчик не загружается

#android #android-layout

#Android #android-макет

Вопрос:

Я пытаюсь создать всплывающее окно (модальное окно) в Android с помощью счетчика, который содержит список опций. Этот счетчик находится в пределах действия фрагмента. Я поместил следующий код в свой onCreateDialog метод:

  @Override
 protected Dialog onCreateDialog(int id) {

  AlertDialog dialogDetails = null;

  switch (id) 
  {
  case DIALOG_LOGIN:
   LayoutInflater inflater = LayoutInflater.from(this);
   View dialogview = inflater.inflate(R.layout.dialog_layout, null);
   ((ItemListFragment) getSupportFragmentManager().findFragmentById(R.id.item_list))
   .setActivateOnItemClick(true);
   Spinner spinner = (Spinner) findViewById(R.id.planets_spinner);
   // Create an ArrayAdapter using the string array and a default spinner layout
  ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
   R.array.planets_array, android.R.layout.simple_spinner_item);
  // Specify the layout to use when the list of choices appears
  adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  // Apply the adapter to the spinner
  spinner.setAdapter(adapter);

   break;
  }

  return dialogDetails;
 }
  

Мой файл XML-макета выглядит следующим образом:

 <LinearLayout xmlns:android='http://schemas.android.com/apk/res/android'
android:layout_width='fill_parent'
android:layout_height='fill_parent'
android:orientation='vertical'
android:padding='10sp' >

<EditText
    android:id='@ id/txt_name'
    android:layout_width='fill_parent'
    android:layout_height='wrap_content'
    android:hint='"Username'
    android:singleLine='true' >

    <requestFocus />
</EditText>

<EditText
    android:id='@ id/password'
    android:layout_width='match_parent'
    android:layout_height='wrap_content'
    android:ems='10'
    android:inputType='textPassword' >
</EditText>

<RelativeLayout
    android:layout_width='match_parent'
    android:layout_height='wrap_content' >

    <Button
        android:id='@ id/btn_login'
        android:layout_width='120dp'
        android:layout_height='wrap_content'
        android:text='"Submit' />

    <Button
        android:id='@ id/btn_cancel'
        android:layout_width='120dp'
        android:layout_height='wrap_content'
        android:layout_alignParentTop='true'
        android:layout_marginLeft='10dp'
        android:layout_toRightOf='@ id/btn_login'
        android:text='"Cancel' />
</RelativeLayout>

<Spinner
android:id="@ id/planets_spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
  

Когда я открываю приложение на своем планшете Android, оно просто закрывает приложение. Когда я создал пользовательский диалог и добавил код в onCreateDialog метод, все было в порядке. Затем я добавил код счетчика, и он не работает. Может кто-нибудь сказать мне, что я делаю не так и как я мог бы заставить счетчик отображаться.

Спасибо!

Комментарии:

1. Измените это Spinner spinner = (Spinner) findViewById(R.id.planets_spinner); на Spinner spinner = (Spinner) dialogview.findViewById(R.id.planets_spinner); . Если это не сработает, опубликуйте свой logcat

Ответ №1:

Проблема в том, что вы не получаете ссылку на счетчик. Попробуйте приведенный ниже код:-

 case DIALOG_LOGIN:
   LayoutInflater inflater = LayoutInflater.from(this);
   View dialogview = inflater.inflate(R.layout.dialog_layout, null);
   ((ItemListFragment) getSupportFragmentManager().findFragmentById(R.id.item_list))
   .setActivateOnItemClick(true);
   Spinner spinner = (Spinner) dialogview.findViewById(R.id.planets_spinner);
   // Create an ArrayAdapter using the string array and a default spinner layout
  ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
   R.array.planets_array, android.R.layout.simple_spinner_item);
  // Specify the layout to use when the list of choices appears
  adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  // Apply the adapter to the spinner
  spinner.setAdapter(adapter);

   break;
  }
  

или

    Spinner spinner = (Spinner) dialogview.findViewById(R.id.planets_spinner);
  

Вы должны получить значение из справочного представления.

Комментарии:

1. Спасибо! Это сработало. Я ввел диалоговое окно и показал диалоговое окно.

Ответ №2:

Это то, что я пробовал, и, похоже, оно отлично подходит для того, что мне нужно сделать. Я добавляю счетчик к фрагменту:

 protected void onCreateDialog() 
{

    final Dialog settingdialog = new Dialog(ItemListActivity.this);  

    settingdialog.setContentView(R.layout.dialog_layout);  
    settingdialog.setTitle("Settings Menu");  
    settingdialog.show();  
    spinner = (Spinner)settingdialog.findViewById(R.id.planets_spinner);  

    //Populate the dropdown list
    String[] state = {"Cupcake", "Donut", "Eclair", "Froyo",
               "Gingerbread", "HoneyComb", "IceCream Sandwich", "Jellybean",
               "KitKat"};
    ArrayAdapter<String>adapter = new ArrayAdapter<String>(ItemListActivity.this,  
            android.R.layout.simple_spinner_item,state);  

    spinner.setAdapter(adapter);  

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
    {
        /**
         * Called when a new item is selected (in the Spinner)
         */
         public void onItemSelected(AdapterView<?> parent, View view, 
                    int pos, long id) 
         {

               value = spinner.getItemAtPosition(pos).toString();
               String s = value;
               if (mTwoPane) 
               {

                   settingdialog.cancel();
                   Bundle arguments = new Bundle();
                   arguments.putInt("num", 1);
                   arguments.putString("value", s);
                   ItemListFragment fragment = new ItemListFragment();
                   fragment.setArguments(arguments);
                                         getSupportFragmentManager().beginTransaction().replace(R.id.item_list, fragment).commit();

               } 
               else 
               {

                   Intent detailIntent = new Intent(ItemListActivity.this, ItemListFragment.class);
                   detailIntent.putExtra("num", 1);
                   detailIntent.putExtra("value", s);
                   startActivity(detailIntent);
               }

            }

            public void onNothingSelected(AdapterView<?> parent) 
            {
            }

    }); 
 }