2013-07-16 82 views
1

我得到一個錯誤,即ArrayAdapter沒有資源ID,但是資源ID在這裏使用,我在活動中使用類似的代碼沒有問題,但是這是在一個分段。是有什麼我應該做的不同,因爲它是在一個片段?這就是爲什麼它不起作用?arrayadapter爲微調不工作在片段,需要資源ID

我做了一個XML佈局,並根據需要放置一個textView。

關於如何使這項工作的任何想法?從片段

棧跟蹤

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包圍的的LinearLayout裏面,你可以看到,如果你在我發佈的代碼爲xml文件的問題看上面。這是造成錯誤的原因。

我通過從xml文件中刪除linearLayout來更改代碼,因此文件中的唯一代碼是針對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的項目和layout.If您使用

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

TextView從的id佈局應該有TextView與ID:android:id/textView1

+0

我試過,但現在我得到資源沒有發現異常 – Kevik

+0

有可能是一種不同的方式,你訪問片段中的資源比活動?另一個奇怪的事情是,我在前面的使用R.layout替代R.id.textView的活動中使用了類似的代碼。可能是錯誤的,但確實奏效。 – Kevik

+0

基本上你想爲Fragment中的微調器創建自定義適配器? – hardartcore

相關問題