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);
}
正常に動作します。(しかし、それは私が望むよりも多くの行を示しています)
私はこの問題について多くの答えを見つけましたが、誰も私のために働いているようには見えません. 何か提案はありますか?