0

ListView があり、ListView の高さに基づいて行の高さを変更する必要があります。これは、一度に固定数の行のみを表示したいのですが、複数の画面の問題があるため、プログラムで高さを計算する必要があるためです。

問題は、getView()カスタム アダプターのメソッドがビューを返すときに、Android で例外が発生することです。

07-21 15:17:00.391: E/AndroidRuntime(620): 致命的な例外: メイン 07-21 15:17:00.391: E/AndroidRuntime(620): java.lang.UnsupportedOperationException: addView(View, LayoutParams) はありませんAdapterView でサポート 07-21 15:17:00.391: E/AndroidRuntime(620): android.widget.AdapterView.addView(AdapterView.java:471) 07-21 15:17:00.391: E/AndroidRuntime(620): android.view.LayoutInflater.inflate(LayoutInflater.java:497) 07-21 15:17:00.391: E/AndroidRuntime(620): android.view.LayoutInflater.inflate(LayoutInflater.java:396) 07-21 15 :17:00.391: E/AndroidRuntime(620): android.view.LayoutInflater.inflate(LayoutInflater.java:352) 07-21 15:17:00.391: E/AndroidRuntime(620): us.hucare.adapters で。 ShelfAdapter.getView(ShelfAdapter.java:72) 07-21 15:17:00.391: E/AndroidRuntime(620): android.widget.AbsListView.obtainView(AbsListView.java:2033) 07-21 15:17:00.391: E/AndroidRuntime(620): android.widget.ListView.makeAndAddView(ListView.java:1772) 07-21 15:17:00.391: E/AndroidRuntime(620) : android.widget.ListView.fillDown(ListView.java:672) 07-21 15:17:00.391: E/AndroidRuntime(620): android.widget.ListView.fillFromTop(ListView.java:732) 07-21 15:17:00.391: E/AndroidRuntime(620): android.widget.ListView.layoutChildren(ListView.java:1625) 07-21 15:17:00.391: E/AndroidRuntime(620): android.widget.AbsListView で.onLayout(AbsListView.java:1863) 07-21 15:17:00.391: E/AndroidRuntime(620): android.view.View.layout(View.java:11278) 07-21 15:17:00.391: E /AndroidRuntime(620): android.view.ViewGroup.layout(ViewGroup.java:4224) 07-21 15:17:00.391: E/AndroidRuntime(620): android.widget.FrameLayout.onLayout(FrameLayout.java: 431) 07-21 15:17:00.391:E/AndroidRuntime(620): android.view.View.layout(View.java:11278) 07-21 15:17:00.391: E/AndroidRuntime(620): android.view.ViewGroup.layout(ViewGroup.java) :4224) 07-21 15:17:00.391: E/AndroidRuntime(620): android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628) 07-21 15:17:00.391: E/AndroidRuntime(620): android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486) 07-21 15:17:00.391: E/AndroidRuntime(620): android.widget.LinearLayout.onLayout(LinearLayout.java:1399) 07-21 15 :17:00.391: E/AndroidRuntime(620): android.view.View.layout(View.java:11278) 07-21 15:17:00.391: E/AndroidRuntime(620): android.view.ViewGroup で。レイアウト (ViewGroup.java:4224) 07-21 15:17:00.391: E/AndroidRuntime(620): android.widget.FrameLayout.onLayout(FrameLayout.java:431) 07-21 15:17:00.391: E/ AndroidRuntime(620):android.view.View.layout(View.java:11278) 07-21 15:17:00.391: E/AndroidRuntime(620): android.view.ViewGroup.layout(ViewGroup.java:4224) 07-21 15 :17:00.391: E/AndroidRuntime(620): android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628) 07-21 15:17:00.391: E/AndroidRuntime(620): android.widget.LinearLayout. layoutVertical(LinearLayout.java:1486) 07-21 15:17:00.391: E/AndroidRuntime(620): android.widget.LinearLayout.onLayout(LinearLayout.java:1399) 07-21 15:17:00.391: E/ AndroidRuntime(620): android.view.View.layout(View.java:11278) 07-21 15:17:00.391: E/AndroidRuntime(620): android.view.ViewGroup.layout(ViewGroup.java:4224) ) 07-21 15:17:00.391: E/AndroidRuntime(620): android.widget.RelativeLayout.onLayout(RelativeLayout.java:925) 07-21 15:17:00.391: E/AndroidRuntime(620): Android で.view.View.レイアウト (View.java:11278) 07-21 15:17:00.391: E/AndroidRuntime(620): android.view.ViewGroup.layout(ViewGroup.java:4224) 07-21 15:17:00.391: E/ AndroidRuntime(620): android.widget.FrameLayout.onLayout(FrameLayout.java:431) 07-21 15:17:00.391: E/AndroidRuntime(620): android.view.View.layout(View.java:11278) ) 07-21 15:17:00.391: E/AndroidRuntime(620): android.view.ViewGroup.layout(ViewGroup.java:4224) 07-21 15:17:00.391: E/AndroidRuntime(620): Android で.widget.LinearLayout.setChildFrame(LinearLayout.java:1628) 07-21 15:17:00.391: E/AndroidRuntime(620): android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486) 07-21 15:17 :00.391: E/AndroidRuntime(620): android.widget.LinearLayout.onLayout(LinearLayout.java:1399) 07-21 15:17:00.391: E/AndroidRuntime(620): android.view.View.layout( View.java:11278) 07-21 15:17:00.391: E/AndroidRuntime(620): android.view.ViewGroup.layout(ViewGroup.java:4224) 07-21 15:17:00.391: E/AndroidRuntime(620): でandroid.widget.FrameLayout.onLayout(FrameLayout.java:431) 07-21 15:17:00.391: E/AndroidRuntime(620): android.view.View.layout(View.java:11278) 07-21 15: 17:00.391: E/AndroidRuntime(620): android.view.ViewGroup.layout(ViewGroup.java:4224) 07-21 15:17:00.391: E/AndroidRuntime(620): android.view.ViewRootImpl.performTraversals で(ViewRootImpl.java:1489) 07-21 15:17:00.391: E/AndroidRuntime(620): android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442) 07-21 15:17:00.391: E/AndroidRuntime (620): android.os.Handler.dispatchMessage(Handler.java:99) 07-21 15:17:00.391: E/AndroidRuntime(620): android.os.Looper.loop(Looper.java:137) で07-21 15:17:00.391:E/AndroidRuntime(620): android.app.ActivityThread.main(ActivityThread.java:4424) 07-21 15:17:00.391: E/AndroidRuntime(620): java.lang.reflect.Method.invokeNative(Native) でメソッド) 07-21 15:17:00.391: E/AndroidRuntime(620): java.lang.reflect.Method.invoke(Method.java:511) 07-21 15:17:00.391: E/AndroidRuntime(620) : com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 07-21 15:17:00.391: E/AndroidRuntime(620): com.android.internal.os.ZygoteInit.main で(ZygoteInit.java:551) 07-21 15:17:00.391: E/AndroidRuntime(620): dalvik.system.NativeStart.main(ネイティブ メソッド) でMethod.invoke(Method.java:511) 07-21 15:17:00.391: E/AndroidRuntime(620): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 07-21 で15:17:00.391: E/AndroidRuntime(620): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 07-21 15:17:00.391: E/AndroidRuntime(620): dalvik で.system.NativeStart.main(ネイティブメソッド)Method.invoke(Method.java:511) 07-21 15:17:00.391: E/AndroidRuntime(620): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 07-21 で15:17:00.391: E/AndroidRuntime(620): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 07-21 15:17:00.391: E/AndroidRuntime(620): dalvik で.system.NativeStart.main(ネイティブメソッド)

ここにの最初の部分がありますgetView()

if (convertView == null || mDataChanged) {
        mDataChanged = false;
        LayoutInflater inflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.row_shelf, parent);
        LayoutParams params = convertView.getLayoutParams();
        if (params == null) { 
            params = new LayoutParams(LayoutParams.MATCH_PARENT, mShelfHeight); 
        } else {
            params.height = mShelfHeight;
        }
        convertView.setLayoutParams(params);
    }

以下のコードを実行すると、問題はその行にあるはずだと思います。

if (convertView == null || mDataChanged) {
            mDataChanged = false;
            LayoutInflater inflater = (LayoutInflater) mContext
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.row_shelf, null);

        }

正常に動作します。(しかし、それは私が望むよりも多くの行を示しています)

私はこの問題について多くの答えを見つけましたが、誰も私のために働いているようには見えません. 何か提案はありますか?

4

1 に答える 1

0

次の行のため、例外がスローされます。

convertView = inflater.inflate(R.layout.row_shelf, parent);

レイアウトを膨張させ、その膨張したレイアウトを親追加することを意味しますが、 (の子である) 直接子ビューを追加できないため、失敗します。代わりに、おそらく次のことが必要です。 ViewGroupListViewAdapterView

convertView = inflater.inflate(R.layout.row_shelf, parent, false);

その後LayoutParams、目的の高さで を設定できます (適切なLayoutParams,を使用することをお勧めしますAbsListView.LayoutParams)。

于 2013-07-21T15:33:11.330 に答える