我通过这个膨胀
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
答案 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
.....
}
它不是理想的解决方案 - 当然只有解决方法。