簡體   English   中英

Android ArrayAdapter要求資源ID為TextView

[英]Android ArrayAdapter requires the resource ID to be a TextView

我不明白為什么會有這個問題。

03-21 10:46:40.739: E/AndroidRuntime(5114): java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView

這是我的代碼:

    headers = new ArrayAdapter<String>(context, R.layout.separated_list_header);

isolated_list_header.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/list_header_title"
        style="?android:attr/listSeparatorTextViewStyle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/ab_bottom_solid_emtheme"
        android:paddingBottom="2dip"
        android:paddingLeft="5dip"
        android:paddingTop="2dip"
        android:textAllCaps="false"
        android:textColor="@color/white" />

如果我不創建ArrayAdapter並給出TextView id,我的應用程序將崩潰:

    headers = new ArrayAdapter<String>(context, 
              R.layout.separated_list_header, R.id.list_header_title);

我在另一個項目中也做同樣的事情,但沒有看到這個問題。 因為xml的根項是TextView,所以我認為它應該可以工作。

編輯:我發現了問題的原因,這是因為此ArrayAdapter用於另一個適配器( SeparatedListAdapter ),然后在調用getView時,convertView的類型不正確。 因此,我現在通過將convertView設置為null來強制創建新視圖來繞過該問題。 這不是一個好的解決方案,因為它使用了過多的資源,但至少可以正常工作。 現在,我必須找到為什么convertView不正確的原因。

這是我修改的SeparatedListAdapter的getView()方法:

    @Override
        public View getView(int position, View convertView, ViewGroup parent) {
        int sectionnum = 0;
        for(Object section : this.sections.keySet()) {
            Adapter adapter = sections.get(section);
            int size = adapter.getCount() + 1;

            // check if position inside this section 
            if(position == 0) {
            convertView = null; //Force creating new view because convertView is not of the right type
            return headers.getView(sectionnum, convertView, parent);
            }
            if(position < size) return adapter.getView(position - 1, convertView, parent);

            // otherwise jump into next section
            position -= size;
            sectionnum++;
        }
        return null;
    }: 

請參閱這些Android文檔

公共ArrayAdapter(上下文上下文,int資源,int textViewResourceId, List<T> objects

我以為您只是錯過了初始化List接口對象的機會。

您應該嘗試使用layoutmanager(即LinearLayout)包裝TextView。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM