Android addfooterview导致异常
我用这个充气Android addfooterview导致异常,android,inflate,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.layo
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
我想这不是因为你指出的那句台词 您是否在代码中的任何位置调用了getLayoutParams() 调用getLayoutParams()时,会向父layoutparams显示typecase 比如,如果ListView的父对象是LinearLayout
LinearLayout.LayoutParams params=(LinearLayout.LayoutParams) listView.getLayoutParams();
RelativeLayout.LayoutParams params=(RelativeLayout.LayoutParams) listView.getLayoutParams();
如果ListView的父对象是RelativeLayout
LinearLayout.LayoutParams params=(LinearLayout.LayoutParams) listView.getLayoutParams();
RelativeLayout.LayoutParams params=(RelativeLayout.LayoutParams) listView.getLayoutParams();
尝试更改此选项:
linear.addView(liInflater.inflate(R.layout.main_particularcategoryallnewslist,
null));
为此:
linear.addView(liInflater.inflate(R.layout.main_particularcategoryallnewslist,
linear));
我也遇到过类似的情况——在list_view.setAdapter()上出现了异常“java.lang.ClassCastException:android.widget.RelativeLayout$LayoutParams” 通过对页脚和列表项使用相同的布局,我成功地解决了这个问题。下面的代码演示了如何在页脚和项目中使用布局“listview_行” 这是“listview_row.xml”的内容:
页脚的初始化方式如下:
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);
View v=视图.充气(pager.Activity,R.layout.listview\u行,空);
视图页脚=(视图)v.findViewById(R.id.listview\u行);
//页脚不使用文本视图,它只使用按钮。所以,我们隐藏文本视图。
footer.findViewById(R.id.hs\u line\u textview).setVisibility(View.GONE);
footer.findViewById(R.id.hs\u行\u页脚\u操作).setVisibility(View.VISIBLE)
...
列表视图。添加页脚视图(页脚);
MyAdapter=新的MyAdapter(上下文,getListItems());
列表\视图.设置适配器(适配器);
适配器:
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
.....
}
公共类MyAdapter扩展了ArrayAdapter{
私人最终阵列列表;
私人最终充气机;
公共MyAdapter(上下文上下文,ArrayList srcList){
super(上下文,0,srcList);
_充气器=充气器。从(上下文);
_List=srcList;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视窗座;
如果(convertView==null){
convertView=\u充气器.充气(R.layout.listview\u行,空);
holder=新的ViewHolder();
//项目不使用按钮,它仅使用TextView
//默认情况下,按钮是隐藏的(请参见xml)
holder.TextView=(TextView)convertView.findViewById(R.id.hs\u line\u TextView);
}否则{
holder=(ViewHolder)convertView.getTag();
}
//项目初始化
.....
}
这不是理想的解决方案-当然只是解决办法。我从来没有调用过getlayoutparam(),你能用XML发布全部代码吗?很抱歉,我用这个
linear.addView(liInflater.inflate(R.layout.main_specificalCategory AllNewslist,linear))尝试了这个linear.addView(liInflater.inflate)来回复(R.layout.main_specificularcategory allnewslistfv,null));
它返回此错误,原因是:java.lang.IllegalStateException:指定的子级已经有父级。您必须首先对子级的父级调用removeView()。