0

テーブルとして機能するカスタムコンポーネント(ヘッダー+本体)があります。私のヘッダーでは、テーブルの各列に入力されたデータ型に応じて「filterViews」を追加しようとしています。したがって、クリックできないチェックボックスとして表されるブール型の列があります。

ヘッダーセルにスピナーを作成しようとしています。3つの選択肢があります。

  • フィルターをクリア(文字列)
  • チェックボックスをオンにしました
  • チェックされていないチェックボックス

私はこのコードを正しくするのに苦労しています。BaseAdapterのコードは次のとおりです。

public class BooleanAdapter extends BaseAdapter
{
    private List<Object> values = new LinkedList<Object>();

    public BooleanAdapter(Context context)
    {   
        TextView txt = new TextView(context);
        txt.setText("Clear filter");
        values.add(txt);

        CheckBox cb1 = new CheckBox(context);
        cb1.setClickable(false);
        cb1.setChecked(true);
        values.add(cb1);

        CheckBox cb2 = new CheckBox(context);
        cb2.setClickable(false);
        cb2.setChecked(false);
        values.add(cb2);
    }

    @Override
    public int getCount()
    {
        return values.size();
    }

    @Override
    public Object getItem(int position)
    {
        return values.get(position);
    }

    @Override
    public long getItemId(int position)
    {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        return (View) values.get(position);
    }
}

コードでスピナーを作成します:

Spinner spinner = new Spinner(getActivity());
BooleanAdapter adapter = new BooleanAdapter(getActivity());
spinner.setAdapter(adapter);

このエラーが発生します:

java.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams
at android.widget.ListView.measureScrapChild(ListView.java:1181)
at android.widget.ListView.measureHeightOfChildren(ListView.java:1264)
at android.widget.ListView.onMeasure(ListView.java:1173)
at android.view.View.measure(View.java:10853)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4353)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1284)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:613)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:519)
at android.view.View.measure(View.java:10853)

助けてくれてありがとう。私はまだアンドロイド(3週間)の初心者なので、おそらく基本的なものが欠けています。ありがとうございました。

4

1 に答える 1

1

アダプターの各項目に LayoutParameters を設定する必要がありました。

public BooleanAdapter(Context context)
{   
    AbsListView.LayoutParams lp = new AbsListView.LayoutParams(AbsListView.LayoutParams.WRAP_CONTENT, AbsListView.LayoutParams.WRAP_CONTENT);
    TextView txt = new TextView(context);
    txt.setText("Clear filter");
    txt.setLayoutParams(lp);
    values.add(txt);

    CheckBox cb1 = new CheckBox(context);
    cb1.setClickable(false);
    cb1.setChecked(true);
    cb1.setLayoutParams(lp);
    values.add(cb1);

    CheckBox cb2 = new CheckBox(context);
    cb2.setClickable(false);
    cb2.setChecked(false);
    cb2.setLayoutParams(lp);
    values.add(cb2);
}
于 2013-03-19T12:45:41.247 に答える