我正在尝试在listview中显示多个布局。我在列表视图中只有三个项目,每行都有不同的布局。这是我正在使用的代码
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中做到这一点? 感谢
答案 0 :(得分:1)
我发现了这个问题。在案例2中返回类型的错误。而不是视图我返回一个ImageButton 这是正确的代码
case 2:
{
View buttonCell = inflater.inflate(R.layout.rssbuttoncell, null);
ImageButton btnWebView = (ImageButton)buttonCell.findViewById(R.id.btn_WebView);
return buttonCell;
}
答案 1 :(得分: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;
}
}