2012-06-01 26 views
0

我已經創建了一個CursorAdapter,但我一直收到以下錯誤:實現一個CursorAdapter,問題與NewView的

06-01 20:36:58.890: E/AndroidRuntime(21204): java.lang.ClassCastException: android.view.View cannot be cast to android.view.ViewGroup 

這裏是我的代碼:

@Override 
public View newView(Context context, Cursor cursor, ViewGroup parent) 
{ 
    final LayoutInflater inflater = LayoutInflater.from(context); 

    //***The error originates from this line*** 
    final View view = inflater.inflate(R.layout.competitor_autocomplete_list_item, parent, false); 

    TextView stockNameTextView = (TextView) view.findViewById(R.id.autocomplete_stock_name); 
    TextView stockSymbolTextView = (TextView) view.findViewById(R.id.autocomplete_stock_symbol);   

    String stockName = cursor.getString(cursor.getColumnIndex(StournamentConstants.TblStocks.COLUMN_NAME)); 
    String stockSymbol = cursor.getString(cursor.getColumnIndex(StournamentConstants.TblStocks.COLUMN_EXTERNAL_ID)); 

    stockNameTextView.setText(stockName); 
    stockSymbolTextView.setText(stockSymbol);  

    return view; 
} 

我的佈局:

<?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="fill_parent" 
android:orientation="horizontal" > 

    <TextView 
    android:id="@+id/autocomplete_stock_name" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:background="#95B9C7" 
    android:padding="10dp"   
    android:textColor="#000" 
    android:textSize="16sp" /> 

    <TextView 
    android:id="@+id/autocomplete_stock_symbol" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:background="#95B9C7" 
    android:padding="10dp"   
    android:textColor="#000" 
    android:textSize="16sp" /> 
</LinearLayout> 

我基本上想要使用帶有兩個TextView的LinearLayout,但由於我使用了兩個TextView而使用View這將會照顧到這個錯誤。我試圖鑄造其他類型,但我卡住了 - 我不明白我在這裏做錯了什麼。

任何人都可以看到我失蹤?謝謝!


UPDATE

我改變了佈局使用LinearLayout。現在我收到以下錯誤: 06-02 00:48:15.820:E/AndroidRuntime(32157):java.lang.ClassCastException:android.widget.LinearLayout $ LayoutParams不能轉換爲android.widget.AbsListView $ LayoutParams

留下下面的方法後:

@Override 
public void bindView(View view, Context context, Cursor cursor) 
{   
    ((LinearLayout) view).addView(view); 
} 

這是異常後打印的紙疊拋出

06-02 00:53:37.031: E/AndroidRuntime(32327): FATAL EXCEPTION: main 
06-02 00:53:37.031: E/AndroidRuntime(32327): java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams 
06-02 00:53:37.031: E/AndroidRuntime(32327): at android.widget.ListView.measureScrapChild(ListView.java:1163) 
06-02 00:53:37.031: E/AndroidRuntime(32327): at android.widget.ListView.measureHeightOfChildren(ListView.java:1246) 
06-02 00:53:37.031: E/AndroidRuntime(32327): at android.widget.ListPopupWindow.buildDropDown(ListPopupWindow.java:1095) 
06-02 00:53:37.031: E/AndroidRuntime(32327): at android.widget.ListPopupWindow.show(ListPopupWindow.java:524) 
06-02 00:53:37.031: E/AndroidRuntime(32327): at android.widget.AutoCompleteTextView.showDropDown(AutoCompleteTextView.java:1062) 
06-02 00:53:37.031: E/AndroidRuntime(32327): at android.widget.AutoCompleteTextView.updateDropDownForFilter(AutoCompleteTextView.java:939) 
06-02 00:53:37.031: E/AndroidRuntime(32327): at android.widget.AutoCompleteTextView.onFilterComplete(AutoCompleteTextView.java:921) 
06-02 00:53:37.031: E/AndroidRuntime(32327): at android.widget.Filter$ResultsHandler.handleMessage(Filter.java:285) 
06-02 00:53:37.031: E/AndroidRuntime(32327): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-02 00:53:37.031: E/AndroidRuntime(32327): at android.os.Looper.loop(Looper.java:137) 
06-02 00:53:37.031: E/AndroidRuntime(32327): at android.app.ActivityThread.main(ActivityThread.java:4424) 
06-02 00:53:37.031: E/AndroidRuntime(32327): at java.lang.reflect.Method.invokeNative(Native Method) 
06-02 00:53:37.031: E/AndroidRuntime(32327): at java.lang.reflect.Method.invoke(Method.java:511) 
06-02 00:53:37.031: E/AndroidRuntime(32327): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
06-02 00:53:37.031: E/AndroidRuntime(32327): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
06-02 00:53:37.031: E/AndroidRuntime(32327): at dalvik.system.NativeStart.main(Native Method) 
+1

包括'R.layout.competitor_autocomplete_list_item' –

回答

4

你不能把其他視圖內的意見。你需要一個ViewGroup來做到這一點,因此錯誤。如果您在佈局xml文件中切換回LinearLayout,則錯誤應該消失。

1

試試這個:

View view = inflater.inflate(R.layout.competitor_autocomplete_list_item, parent, false); 

編輯

我錯過了你從LinearLayout中改變。雷納德是正確的,改回它(並且不要試圖施放它),它應該工作。

+1

'inflate'已經返回'View'的XML,所以劇組無害首先,刪除它不會改變任何東西。 –

+1

我的意思是不要嘗試將它投射到LinearLayout,但由於我不清楚,所以點好了。 – Barak

+0

現在我收到以下錯誤:06-02 00:48:15.820:E/AndroidRuntime(32157):java.lang.ClassCastException:android.widget.LinearLayout $ LayoutParams不能轉換爲android.widget.AbsListView $ LayoutParams - 任何想法? – roysch

0

我記錄了這個世代來。

誤導我的是,我不明白我必須重複我在newView()中也有的bindView()

我看到人們結合單一TextView這樣的:((TextView) view).setText(item);,並認爲我必須做的情況下,同樣的我通過View因爲你不能setText()View我做了這樣的事情:((LinearLayout) view).addView(view);

嗯,我寧願忘記這一切,甚至發生在我身上。這是正確的代碼,如果你有興趣在你的CursorAdapter使用的LinearLayout:

@Override 
public View bindView(Context context, Cursor cursor, ViewGroup parent) 
{ 
    TextView stockNameTextView = (TextView) view.findViewById(R.id.autocomplete_stock_name); 
    TextView stockSymbolTextView = (TextView) view.findViewById(R.id.autocomplete_stock_symbol);   

    String stockName = cursor.getString(cursor.getColumnIndex(TournamentConstants.TblStocks.COLUMN_NAME)); 
    String stockSymbol = cursor.getString(cursor.getColumnIndex(TournamentConstants.TblStocks.COLUMN_EXTERNAL_ID)); 

    stockNameTextView.setText(stockName); 
    stockSymbolTextView.setText(stockSymbol);  
}