2013-07-16 5 views
1

Я получаю сообщение об ошибке, что ArrayAdapter не имеет идентификатора ресурса, однако здесь используется идентификатор ресурса, и я использовал аналогичный код в действии без проблем, однако это находится в фрагмент. есть ли что-то, что я должен делать по-другому, потому что это фрагмент? и поэтому он не работает?arrayadapter for spinner не работает в фрагменте, требует идентификатор ресурса

Я сделал xml-макет и поместил в него текстовый файл.

любые идеи о том, как это сделать?

трассировки стека

07-16 20:11:44.290: E/AndroidRuntime(14278): FATAL EXCEPTION: main 
07-16 20:11:44.290: E/AndroidRuntime(14278): java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView 
07-16 20:11:44.290: E/AndroidRuntime(14278): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386) 
07-16 20:11:44.290: E/AndroidRuntime(14278): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) 

oncreateview метод из фрагмента. этот метод, где все действие

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View result=inflater.inflate(R.layout.small_tank_layout11, container, false); 

     activity = getActivity(); 

     // set shared preferences variable with shared preferences object for use 
     prefs = activity.getSharedPreferences("smallTankPreferences", Context.MODE_PRIVATE); 

     textViewOne = (TextView) result.findViewById(R.id.textView1); 
     textViewTwo = (TextView) result.findViewById(R.id.textView2); 
     spinnerOne = (Spinner) result.findViewById(R.id.spinner1); 
     buttonOne = (Button) result.findViewById(R.id.button1); 

     // get stored title quesion and set text 
     smallTank11question = prefs.getString("smallTank11question", ""); 
     textViewOne.setText(smallTank11question); 

     // get arraylist from json string 
     Gson gson = new Gson(); 
     Type type = new TypeToken<ArrayList<String>>(){}.getType(); 
     smallTank11WeatherNames = prefs.getString("smallTank11WeatherNames", ""); 
     smallTank11WeatherNamesArray = gson.fromJson(smallTank11WeatherNames, type); 

     // get the weather selected indicator stored in shared prefereces 
     smallTank11WeatherSelected = prefs.getInt("smallTank11WeatherSelected", -1); 

    //put strings of weather selections into spinner 
     ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(activity, R.layout.small_tank_spinnerlayout_one, smallTank11WeatherNamesArray); // layout for spinner itself 
     dataAdapter.setDropDownViewResource(R.layout.small_tank_spinnerlayout_one); // layout for spinner dropdown items 
     spinnerOne.setAdapter(dataAdapter); 


     return result; 

    } // end oncreateview 

Редактировать здесь я добавил код для small_tank_spinnerlayout_one.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Large Text" 
    android:textAppearance="?android:attr/textAppearanceLarge" /> 

</LinearLayout> 
+0

Если вы хотите использовать пользовательский макет в адаптере массива вам нужно для создания адаптера массива «Пользовательский», а не по умолчанию. – Broak

ответ

1

Я узнал ответ, почему arrayAdapter не работал.

первый сам код ArrayAdapter правильно и никакие изменения не нужны были

ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(activity, R.layout.small_tank_spinnerlayout_one, smallTank11WeatherNamesArray); // layout for spinner itself 
    dataAdapter.setDropDownViewResource(R.layout.small_tank_spinnerlayout_one); // layout for spinner dropdown items 
    spinnerOne.setAdapter(dataAdapter); 

проблема была в файле XML, используемый для заполнения представления в блесны, small_tank_spinnerlayout_one.xml, в этом файле была TextView заключенный внутри линейногоLayout, как вы можете видеть, если вы посмотрите выше в вопросе, где я разместил код для xml-файла. это и послужило причиной ошибок.

Я изменил код, удалив linearLayout из xml-файла, поэтому единственный текст в файле для textView показан ниже, и теперь он работает.

Извлеченный урок, для этой версии ArrayAdapter, которую я использую, вы не можете приложить textView в любом виде макета.

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/textView1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:padding="20dp" 
    android:textSize="14pt"  
    android:gravity="center" 
/> 

кроме того, вы не должны называть TextView, так как я удалил эту строку показано ниже, и она до сих пор работает

android:id="@+id/textView1" 
2

В этой строке:

ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(activity, R.layout.small_tank_spinnerlayout_one, smallTank11WeatherNamesArray); 

вы должны указать, к которому TextView в используйте с вашего макета. Для этого вы должны создать свой ArrayAdapter следующим образом:

ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(activity, R.layout.small_tank_spinnerlayout_one, R.id.textView1, smallTank11WeatherNamesArray); 

Где вы указываете первый макет использовать для элементов ваших Spinner «S и идентификатор вашего TextView от того layout.If вы используете

ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(activity, R.layout.small_tank_spinnerlayout_one, smallTank11WeatherNamesArray); 

макет должен иметь TextView с идентификатором: android:id/textView1

+0

Я пробовал это, но теперь я получаю ресурс, не найденный исключение – Kevik

+0

, возможно, существует другой способ доступа ресурсов к фрагменту, чем к активности? и еще одна странная вещь заключается в том, что я использовал код аналогичного кода раньше в активности, где вместо R.id.textView использовался R.layout. вероятно, ошибочен, но это действительно сработало. – Kevik

+0

В принципе, вы хотите создать пользовательский адаптер для счетчика в Фрагменте? – hardartcore

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