I have a list adaptor that i'm trying to set a custom xml for (item.xml) if i dont use inflation (direct identifying the textview through an application context), it works perfectly.. but then my listview can't be themed..
public View getView(int position, View convertView, ViewGroup parent) {
//System.gc();
TextView tv;
LayoutInflater inflater = getLayoutInflater();
View row = View.inflate(mContext,R.layout.item,null); //.inflate(R.layout.item, parent, false); doesnt work either..
String id = null;
if (convertView == null) {
tv = (TextView) row.findViewById(R.id.TextView01);;
} else
tv = (TextView) convertView;
[..]
in logcat
I am getting this..
07-15 19:45:51.710: ERROR/AndroidRuntime(20185): FATAL EXCEPTION: main
java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams
at android.widget.ListView.setupChild(ListView.java:1827)
at android.widget.ListView.makeAndAddView(ListView.java:1794)
at android.widget.ListView.fillDown(ListView.java:688)
my item.xml file is as follows:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:gravity="left|center"
android:layout_width="fill_parent"
android:paddingBottom="15px"
android:background="#fff200"
android:paddingTop="15px"
android:paddingLeft="15px">
<TextView android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="40px"
android:textStyle="bold"
android:layout_marginLeft="20px"
android:textColor="#0099CC">
</TextView>
</LinearLayout>
The problem is caused by wrapping the control you're returning from the adapter in a linearlayout. Lose the LinearLayout from your layout file (just put the TextView as the root) and I think it should work.
To expand slighly: you're creating your control, and then adding it into a LinearLayout. At this point a LinearLayout$LayoutParams object is allocated for it and set as its layout params. You then pull it out of the linear layout and put it into your list view, which doesn't understand the LinearLayout$LayoutParams.
Alternatively, return row from getView rather than (as I presume you are doing at the moment, as you have cut the return line out of your quoted code) returning tv.
(Another, unrelated hint: you are inflating your layout and then discarding it when convertView != null; this will result in poor scrolling performance on slow devices. Only perform the inflation if you're actually going to need it.)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With