Tôi đang cố gắng đặt lề trái cho các mục trong ListView của tôi. Sự cố xảy ra trong Bộ điều hợp tùy chỉnh của tôi theo phương thức getView:Không thể đặt lề của mục trong ListView bằng cách sử dụng Bộ điều hợp tùy chỉnh
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
Comment c = comments.get(position);
convertView = inflater.inflate(R.layout.list_item, null);
(TextView)convertView.findViewById(R.id.story)).setText(c.message);
}
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT);
lp.setMargins(0, c.getDepth() * 5, 0, 0);
convertView.setLayoutParams(lp);
return convertView;
}
Chúng tôi thổi phồng bố cục list_item là RelativeLayout với một số textViews bên trong. Sau đó tôi cố gắng đặt lề bằng cách sử dụng RelativeLayout.LayoutParams. Tôi nhận được một ngoại lệ lớp học về điều này, nhưng các loại LayoutParams bình thường không có phương pháp để thiết lập các lề.
Cách tốt nhất để thiết lập lề là gì?
Đây là lỗi
java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams
at android.widget.ListView.setupChild(ListView.java:1779)
at android.widget.ListView.makeAndAddView(ListView.java:1748)
at android.widget.ListView.fillDown(ListView.java:670)
at android.widget.ListView.fillFromTop(ListView.java:727)
at android.widget.ListView.layoutChildren(ListView.java:1598)
at android.widget.AbsListView.onLayout(AbsListView.java:1273)
at android.view.View.layout(View.java:7192)
at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
at android.view.View.layout(View.java:7192)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
at android.view.View.layout(View.java:7192)
at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
at android.view.View.layout(View.java:7192)
at android.view.ViewRoot.performTraversals(ViewRoot.java:1145)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1865)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3835)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
at dalvik.system.NativeStart.main(Native Method)
Nó thực sự có vẻ xảy ra sau khi tôi trả về converView, mặc dù bạn đã chính xác rằng tôi cần phải thiết lập lề trước đó. Tôi đã thêm lỗi vào bài đăng của mình. –
Tôi đã thực hiện một ứng dụng đơn giản để kiểm tra nó, nhưng không quản lý để làm cho nó hoạt động. Tôi đề nghị bạn sử dụng Xem đệm thay vào đó, mà tôi đã nghĩ rằng hành vi tương tự. convertView.setPadding (0, c.getDepth() * 5, 0, 0); Xin lỗi vì không mang thêm trợ giúp:/ – Astrorvald
Rất tiếc, tôi thực sự muốn toàn bộ chế độ xem bị dịch chuyển và phần đệm chỉ tạo không gian trong chế độ xem. Cảm ơn bạn đã cố gắng! –