0

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>

私は基本的に 2 つの TextView で LinearLayout を使用したかったのですが、これでこのエラーを処理できると考えたため、2 つの 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)
4

3 に答える 3

4

ビューを他のビュー内に配置することはできません。そのためには ViewGroup が必要なため、エラーが発生します。レイアウト xml ファイルで LinearLayout に戻すと、エラーは解消されます。

于 2012-06-01T20:54:18.973 に答える
1

これを試して:

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

編集

LinearLayout から変更したことを見逃していました。レナードは正しいです。それを元に戻して (そしてキャストしようとしないでください)、動作するはずです。

于 2012-06-01T20:58:52.453 に答える
0

私はこれを次の世代のために記録します。

newView()私を誤解させたのは、私が持っているものを にも複製しなければならないことを理解していなかったことですbindView()

私は人々がシングルをそのようにバインドするのを見ましたTextView:((TextView) view).setText(item);そして、私が a を渡す場合に同じことをし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);       
}
于 2012-06-04T08:54:48.787 に答える