2012-05-04 18 views
2

私はこれは私のリストビューaddfooterview原因例外

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

あるこの

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

で膨らませる私は2番目の時間を膨張させるようにしたいけどできませんでした。私はこのエラーを取得する理由の問題は何ですか?

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

たFIRSTTIMEを膨らませることができますしかし

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、線形))で試してみました 返事が遅れについて。 これは私にこのエラーを返します '原因:java.lang.IllegalStateException:指定された子がすでに親を持っています。子の親で最初にremoveView()を呼び出す必要があります。 ' –

0

私は

あなたはどこでもあなたのコード内)(getLayoutParamsを電話した...それが原因であなたが指摘したラインではないと思いますか?

getLayoutParams()を呼び出すと、親のlayoutparamsにtypecaseが表示されます。

と同様に、あなたの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"をフッターとアイテムに使用する方法を示しています。

<?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> 

フッターは、このような方法で初期化されています:

この

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

アダプタ:それは理想的なソリューションではありません

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 
     ..... 
    } 

- のみもちろん、回避策。

関連する問題