0

I am trying to display multiple layout in my listview. I am having only three items in list view and each row is having a different layout. Here is the code I am using for that

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

But while running its crashing and giving error

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)

Could someone help please? How can I do this in android? Thanks

1
  • Why you are returning 3 from getCount()? And can you share your design pliz.... I don't think you need to implement list view. Commented Oct 25, 2011 at 13:20

2 Answers 2

1

I found the issue. Its an error with the return type in case 2. Instead of view I was returning a ImageButton Here is the correct code

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

    return buttonCell;
}
Sign up to request clarification or add additional context in comments.

Comments

0

I think that your mistake is that you are trying to put more than a 3 item in a list, and when your list is bigger than that it's showing you a mistake... try with this:

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.