2012-05-04 74 views
2

我这个addfooterview原因异常

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)); 

这是充气的ListView我

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

我想抬高第二次但没有成功。

但是我可以抬高firsttime这是

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

你可以用XML发布总代码吗? – Veer

回答

1

尝试修改此:

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

为此:

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

对不起已故的答复 我试着用这个 'linear.addView(liInflater.inflate(R.layout.main_particularcategoryallnewslist,线性)); linear.addView(liInflater.inflate(R.layout.main_particularcategoryallnewslistfv,null));' 它返回我这个错误 '由于:java.lang.IllegalStateException:指定的子项已经有一个父。您必须先调用子对象的父对象的removeView()。 ' –

0

我想这是因为你所指出的行不..

你叫getLayoutParams()在你的代码的任何地方?

无论何时调用getLayoutParams(),都会显示typecase父级layoutparams。

一样,如果你的ListView的父的LinearLayout然后,

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

如果你的ListView的父RelativeLayout的话,

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

我从来没有叫getlayoutparam() –

0

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

我已设法通过对页脚和列表项使用相同的布局来解决此问题。下面的代码演示了如何在页脚和项目中使用布局“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 
     ..... 
    } 

这不是理想的解决方案 - 只解决方法,当然。