2

これで膨らませる

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
4

3 に答える 3

1

これを変更してみてください:

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

これに:

linear.addView(liInflater.inflate(R.layout.main_particularcategoryallnewslist,
      linear));
于 2012-05-04T07:02:59.157 に答える
0

あなたが指摘した線のせいではないと思います。

コード内のどこかでgetLayoutParams()を呼び出しましたか?

getLayoutParams()を呼び出すときはいつでも、親のlayoutparamsにtypecaseを表示します。

たとえば、ListViewの親がLinearLayoutの場合、

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

ListViewの親がRelativeLayoutの場合、

RelativeLayout.LayoutParams params=(RelativeLayout.LayoutParams) listView.getLayoutParams();
于 2012-05-04T07:02:58.407 に答える
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 
        .....
   }

これは理想的な解決策ではありません。もちろん、回避策のみです。

于 2012-05-15T03:02:34.263 に答える