0

我正在尝试在我的列表视图中显示多个布局。我在列表视图中只有三个项目,每一行都有不同的布局。这是我使用的代码

private class CompetitionDetailsAdapter extends ArrayAdapter<Article> {


public CompetitionDetailsAdapter(Context context, int textViewResourceId
                ) {
            super(context, 0);
            // TODO Auto-generated constructor stub
        }

        @Override
        public int getCount() {
            return 3;
        }

        @Override
        public int getItemViewType(int position) {
            return position;
        }

        @Override
        public int getViewTypeCount() {
            return 3;
        }



        @Override
        public View getView(int position, View convertView, ViewGroup parent) 
        {
            // TODO Auto-generated method stub
            //return super.getView(position, convertView, parent);
            LayoutInflater inflater=getLayoutInflater();
            int type = getItemViewType(position);
            switch(type)
            {
                case 0:
                {
                    View headerCell = inflater.inflate(R.layout.rsscellheader, null);
                    ImageView imageView = (ImageView)headerCell.findViewById(R.id.headerCellImage);
                    TextView title = (TextView)headerCell.findViewById(R.id.txt_HeaderCellTitle);
                    TextView date = (TextView)headerCell.findViewById(R.id.txt_HeaderCellDate);
                    Activity activity = (Activity) getContext();
                    imageLoader.DisplayImage(appDeleg.getSelectedCompetition().getImage(), activity, imageView);
                    return headerCell;
                    //break;
                }
                case 1:
                {
                    View webViewCell = inflater.inflate(R.layout.rsswebviewcell, null);
                    WebView webView = (WebView)webViewCell.findViewById(R.id.webView);
                    webView.loadData(appDeleg.getSelectedCompetition().getDescription(), "text/html", "utf-8");
                    return webViewCell;
                }
                case 2:
                {
                    View buttonCell = inflater.inflate(R.layout.rssbuttoncell, null);
                    ImageButton btnWebView = (ImageButton)buttonCell.findViewById(R.id.btn_WebView);
                    return btnWebView;
                }
            }
            return convertView;
        }
    }

但是在运行时崩溃并给出错误

10-25 14:00:14.298: ERROR/AndroidRuntime(3102): java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams
10-25 14:00:14.298: ERROR/AndroidRuntime(3102):     at android.widget.ListView.measureScrapChild(ListView.java:1117)
10-25 14:00:14.298: ERROR/AndroidRuntime(3102):     at android.widget.ListView.measureHeightOfChildren(ListView.java:1200)
10-25 14:00:14.298: ERROR/AndroidRuntime(3102):     at android.widget.ListView.onMeasure(ListView.java:1109)
10-25 14:00:14.298: ERROR/AndroidRuntime(3102):     at android.view.View.measure(View.java:8172)

有人可以帮忙吗?我怎么能在android中做到这一点?谢谢

4

2 回答 2

1

我发现了这个问题。在案例 2 中,它的返回类型出错。我返回的是 ImageButton 而不是视图 这是正确的代码

case 2:
{     
    View buttonCell = inflater.inflate(R.layout.rssbuttoncell, null);
    ImageButton btnWebView = (ImageButton)buttonCell.findViewById(R.id.btn_WebView);

    return buttonCell;
}
于 2011-10-25T14:43:10.733 回答
0

我认为你的错误是你试图在一个列表中放置超过 3 个项目,当你的列表大于它时,它向你显示一个错误......试试这个:

private class CompetitionDetailsAdapter extends ArrayAdapter<Article> {
int i =0;

public CompetitionDetailsAdapter(Context context, int textViewResourceId
                ) {
            super(context, 0);
            // TODO Auto-generated constructor stub
        }

        @Override
        public int getCount() {
            return 3;
        }

        @Override
        public int getItemViewType(int position) {
            return position;
        }

        @Override
        public int getViewTypeCount() {
            return 3;
        }



        @Override
        public View getView(int position, View convertView, ViewGroup parent) 
        {
            // TODO Auto-generated method stub
            //return super.getView(position, convertView, parent);
            LayoutInflater inflater=getLayoutInflater();

            switch(i)
            {
                case 0:
                {
                    View headerCell = inflater.inflate(R.layout.rsscellheader, null);
                    ImageView imageView = (ImageView)headerCell.findViewById(R.id.headerCellImage);
                    TextView title = (TextView)headerCell.findViewById(R.id.txt_HeaderCellTitle);
                    TextView date = (TextView)headerCell.findViewById(R.id.txt_HeaderCellDate);
                    Activity activity = (Activity) getContext();
                    imageLoader.DisplayImage(appDeleg.getSelectedCompetition().getImage(), activity, imageView);
                    return headerCell;
                    i++;
                    //break;
                }
                case 1:
                {
                    View webViewCell = inflater.inflate(R.layout.rsswebviewcell, null);
                    WebView webView = (WebView)webViewCell.findViewById(R.id.webView);
                    webView.loadData(appDeleg.getSelectedCompetition().getDescription(), "text/html", "utf-8");
                    i++;
                    return webViewCell;
                }
                case 2:
                {
                    View buttonCell = inflater.inflate(R.layout.rssbuttoncell, null);
                    ImageButton btnWebView = (ImageButton)buttonCell.findViewById(R.id.btn_WebView);
                    i = 0;
                    return btnWebView;
                }
            }
            return convertView;
        }
    }
于 2011-10-25T13:22:06.973 回答