我创建了一个CursorAdapter但是我一直收到以下错误:
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,因为我认为这将解决这个错误。我试着去其他类型,但我被卡住了 - 我不明白我在这里做错了什么。
谁能看到我错过的东西?谢谢!
更新
我更改了布局以使用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)
答案 0 :(得分:4)
您无法将视图置于其他视图中。您需要ViewGroup来执行此操作,因此会出错。如果在布局xml文件中切换回LinearLayout,则错误应该消失。
答案 1 :(得分:1)
试试这个:
View view = inflater.inflate(R.layout.competitor_autocomplete_list_item, parent, false);
修改强>
我错过了你从LinearLayout改变了。 Renard是正确的,更改它(并且不要尝试施放它)它应该可以工作。
答案 2 :(得分:0)
我会为后代记录这一点。
误导我的是,我不明白我必须在newView()
中复制我bindView()
中的内容。
我看到人们绑定一个TextView
就像那样:((TextView) view).setText(item);
并认为如果我通过View
我必须这样做,因为你不能{{1}在setText()
上我做了类似的事情:View
。
我宁愿忘记这件事发生在我身上。如果您对在CursorAdapter中使用LinearLayout感兴趣,那么这是正确的代码:
((LinearLayout) view).addView(view);