addfooterview导致异常

时间:2012-05-04 06:50:49

标签: android inflate

我通过这个膨胀

linear = (LinearLayout) findViewById(R.id.layout_content);
    linear.setVisibility(View.VISIBLE);
LayoutInflater liInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    linear.addView(liInflater.inflate(R.layout.main_particularcategoryallnewslist, null));
    linear.addView(liInflater.inflate(R.layout.main_particularcategoryallnewslistfv, null));

这是我的列表视图

btnmore = (Button)findViewById(R.id.btn_more);
getListView().addFooterView(btnmore);
lv.setAdapter(adapter);

我想第二次膨胀但失败了。

然而,我可以第一次充气

linear.addView(liInflater.inflate(R.layout.main_particularcategoryallnewslist, null));

我收到此错误的原因是什么?

java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams

3 个答案:

答案 0 :(得分:1)

尝试更改此内容:

linear.addView(liInflater.inflate(R.layout.main_particularcategoryallnewslist,
      null));

对此:

linear.addView(liInflater.inflate(R.layout.main_particularcategoryallnewslist,
      linear));

答案 1 :(得分:0)

我认为这不是因为你指出的那条线。

您是否在代码中的任何位置调用了getLayoutParams()?

当你调用getLayoutParams()时,你会显示typecase到parent layoutparams。

就像,如果您的ListView的父级是LinearLayout,那么

LinearLayout.LayoutParams params=(LinearLayout.LayoutParams) listView.getLayoutParams();

如果你的ListView的父亲是RelativeLayout,那么,

RelativeLayout.LayoutParams params=(RelativeLayout.LayoutParams) listView.getLayoutParams();

答案 2 :(得分:0)

我有类似的情况 - 有异常" java.lang.ClassCastException:android.widget.RelativeLayout $ LayoutParams"在list_view.setAdapter();

我设法通过对页脚和列表项使用相同的布局来解决此问题。下面的代码演示了如何使用layout" listview_row"在页脚和项目中。

这是" listview_row.xml"的内容:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/hs_line" 
android:layout_alignParentLeft ="true"
android:layout_width="fill_parent" 
android:layout_height="wrap_content">

<!-- TextView for list items -->
<TextView android:id="@+id/hs_line_textview" 
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:layout_alignParentLeft="true"       
    />

<!-- Button for footer -->
<Button android:id="@+id/hs_line_footer_action" 
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:visibility="gone"
    android:layout_alignParentLeft="true"       
/>
</RelativeLayout>

以这种方式初始化页脚:

View v = View.inflate(pager.Activity, R.layout.listview_row,  null);
View footer = (View) v.findViewById(R.id.listview_line);

//footer doesn't use TextView, it uses Button only. So, we hide TextView.
footer.findViewById(R.id.hs_line_textview).setVisibility(View.GONE); 
footer.findViewById(R.id.hs_line_footer_action).setVisibility(View.VISIBLE)
...
list_view.addFooterView(footer);

MyAdapter<Item> adapter = new MyAdapter(context, getListItems());
list_view.setAdapter(adapter);

适配器:

public class MyAdapter<T> extends ArrayAdapter<T> {
private final ArrayList<T> _List;
private final LayoutInflater _Inflater;

public MyAdapter(Context context, ArrayList<T> srcList) {
    super(context, 0, srcList);
    _Inflater = LayoutInflater.from(context);
    _List = srcList;
}

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;

        if (convertView == null) {    
            convertView = _Inflater.inflate(R.layout.listview_row, null);
            holder = new ViewHolder();

        //item doesn't use Button, it uses TextView only   
        //Button is hidden by default (see xml)
            holder.TextView = (TextView) convertView.findViewById(R.id.hs_line_textview);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        //item initialization 
        .....
   }

它不是理想的解决方案 - 当然只有解决方法。