Android 在适配器中获取仅返回1项的项视图类型
我有一个自定义适配器,它将根据特定条件对两种布局进行充气。 GetItemViewType只返回位置中的一个项目,而有两个项目,当我在列表中显示它时,适配器会为一个布局充气,而另一个布局则不是,我可以在列表中看到,有一个空间留给它,但它是空的。 这是我的密码Android 在适配器中获取仅返回1项的项视图类型,android,android-listview,android-adapter,custom-adapter,Android,Android Listview,Android Adapter,Custom Adapter,我有一个自定义适配器,它将根据特定条件对两种布局进行充气。 GetItemViewType只返回位置中的一个项目,而有两个项目,当我在列表中显示它时,适配器会为一个布局充气,而另一个布局则不是,我可以在列表中看到,有一个空间留给它,但它是空的。 这是我的密码 enter code here public class ListViewAdapter extends ArrayAdapter<NewsFeed> { private static final int mission
enter code here
public class ListViewAdapter extends ArrayAdapter<NewsFeed>
{
private static final int missionLayout = 0;
private static final int badgeLayout = 1;
private TreeSet mSeparatorsSet = new TreeSet();
public ListViewAdapter ()
{
super(CityNewsFeedActivity.this,R.layout.activity_activity_city_news_feed,newsfeed);
}
@Override
public int getItemViewType(int position)
{
return mSeparatorsSet.contains(position) ? missionLayout : badgeLayout;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder=null;
int type = getItemViewType(position);
System.out.println("getView " + position + " " + convertView + " type = " + type);
if (convertView == null)
{
NewsFeed obj = newsfeed.get(position);
holder = new ViewHolder();
switch (type)
{
case missionLayout:
Log.d("fet 3ala mission layout","tahet il case");
convertView = getLayoutInflater().inflate(R.layout.city_news_single_item, parent,false);
holder.civilianImage = (ImageView) convertView.findViewById(R.id.imageView2);
holder.heroName = (TextView) convertView.findViewById(R.id.badgename);
holder.description = (TextView) convertView.findViewById(R.id.description);
holder.timeRemaining = (TextView) convertView.findViewById(R.id.postedSince);
holder.relativeLayoutMission = (RelativeLayout) convertView.findViewById(R.id.relativeLayout);
if (obj.category.equals("mission"))
{
if (obj.accepted_rejected.equals("success"))
{
holder.relativeLayoutMission.setBackgroundResource(R.drawable.mission_successful);
Float alpha = Float.valueOf("0.9");
holder.relativeLayoutMission.setAlpha(alpha);
byte[] decodedString = Base64.decode(obj.picture, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
Bitmap circleBitmap = Bitmap.createBitmap(decodedByte.getWidth(), decodedByte.getHeight(), Bitmap.Config.ARGB_8888);
BitmapShader shader = new BitmapShader(decodedByte, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
Paint paint = new Paint();
paint.setShader(shader);
Canvas c = new Canvas(circleBitmap);
c.drawCircle(decodedByte.getWidth() / 2, decodedByte.getHeight() / 2, decodedByte.getWidth() / 2, paint);
holder.civilianImage.setImageBitmap(circleBitmap);
Drawable d = getResources().getDrawable(
R.drawable.circle_shape_for_civilian_success);
holder.civilianImage.setBackgroundDrawable(d);
String hero = obj.mission_nickname;
holder.heroName.setText(Html.fromHtml("<font color='#FAD84F'>" + hero + "</font>" + " saved " + obj.firstname + " " + obj.lastname));
holder.description.setText(obj.description);
holder.timeRemaining.setText(obj.mission_postedSince);
}
}
break;
case badgeLayout:
convertView = getLayoutInflater().inflate(R.layout.badge_single_item, null);
holder.relativeLayoutBadge = (RelativeLayout) convertView.findViewById(R.id.relativeLayout);
holder.BadgeName = (TextView) convertView.findViewById(R.id.badgename);
holder.badgeImage = (ImageView) convertView.findViewById(R.id.imageView2);
holder.timeRemaining = (TextView) convertView.findViewById(R.id.postedSince);
if (obj.category.equals("badge"))
{
holder.relativeLayoutBadge.setBackgroundResource(R.drawable.earned_badge_post);
Float alpha = Float.valueOf("0.9");
holder.relativeLayoutBadge.setAlpha(alpha);
String hero = obj.nickname;
holder.BadgeName.setText(Html.fromHtml("<font color='#FAD84F'>" + hero + "</font>" + " earns a new badge! "));
Drawable d = getResources().getDrawable(R.drawable.circle_shape_for_badge);
holder.badgeImage.setBackgroundDrawable(d);
String imageUrl = "http://iamheroic.net/iamheroic/badge_images/" + obj.icon;
imageLoader.displayImage(imageUrl, holder.badgeImage, options);
holder.timeRemaining.setText(obj.postedSince);
}
break;
}
if (convertView != null)
{
convertView.setTag(holder);
}
}
return convertView;
}
}
在此处输入代码
公共类ListViewAdapter扩展了ArrayAdapter
{
私有静态最终int任务布局=0;
专用静态最终布局=1;
私有树集mseparatorset=新树集();
公共ListViewAdapter()
{
超级(CityNewsFeedActivity.this,R.layout.activity\u activity\u city\u news\u feed,newsfeed);
}
@凌驾
public int getItemViewType(int位置)
{
返回MSEParatorSet.contains(位置)?任务布局:徽章布局;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图)
{
ViewHolder=null;
int type=getItemViewType(位置);
System.out.println(“getView”+位置+“”+convertView+”类型=“+类型);
if(convertView==null)
{
NewsFeed obj=NewsFeed.get(位置);
holder=新的ViewHolder();
开关(类型)
{
案件任务安排:
日志d(“fet 3ala任务布局”、“塔赫特岛案例”);
convertView=GetLayoutFlater()。充气(R.layout.city\u news\u single\u item,parent,false);
holder.civilianImage=(ImageView)convertView.findViewById(R.id.imageView2);
holder.heroName=(TextView)convertView.findViewById(R.id.badgename);
holder.description=(TextView)convertView.findViewById(R.id.description);
holder.timeRemaining=(TextView)convertView.findViewById(R.id.postedSince);
holder.relativeLayoutMission=(RelativeLayout)convertView.findViewById(R.id.RelativeLayout);
if(目标类别等于(“任务”))
{
如果(接受对象与拒绝对象相等(“成功”))
{
持有者.相对任务.挫折背景资源(R.可提取.任务成功);
浮点α=浮点值(“0.9”);
持有人。相对发射率。设定α(α);
字节[]decodedString=Base64.decode(obj.picture,Base64.DEFAULT);
位图decodedByte=BitmapFactory.decodeByteArray(decodedString,0,decodedString.length);
Bitmap circleBitmap=Bitmap.createBitmap(decodedByte.getWidth()、decodedByte.getHeight()、Bitmap.Config.ARGB_8888);
BitmapShader着色器=新的BitmapShader(decodedByte,shader.TileMode.CLAMP,shader.TileMode.CLAMP);
油漆=新油漆();
画图。设置阴影(着色器);
画布c=新画布(圆形位图);
c、 drawCircle(decodedByte.getWidth()/2,decodedByte.getHeight()/2,decodedByte.getWidth()/2,绘制);
holder.civilianImage.setImageBitmap(circleBitmap);
Drawable d=getResources().getDrawable(
R.可拉拔。圆形(用于平民成功);
支架。civilianImage。可缩位拉深(d);
字符串hero=obj.mission_昵称;
holder.heroName.setText(Html.fromHtml(“+hero++”saved“+obj.firstname++”+obj.lastname));
保持架说明setText(对象说明);
holder.timelexing.setText(obj.mission_postedSince);
}
}
打破
案例布局:
convertView=GetLayoutFlater()。充气(R.layout.badge\u单个\u项,空);
holder.relativeLayoutBadge=(RelativeLayout)convertView.findViewById(R.id.RelativeLayout);
holder.BadgeName=(TextView)convertView.findViewById(R.id.BadgeName);
holder.badgeImage=(ImageView)convertView.findViewById(R.id.imageView2);
holder.timeRemaining=(TextView)convertView.findViewById(R.id.postedSince);
if(对象类别等于(“徽章”))
{
持有相对论徽章。挫折背景资源(R.可提取。获得的徽章职位);
浮点α=浮点值(“0.9”);
持有者。相对论徽章。设定α(α);
字符串hero=obj.昵称;
holder.BadgeName.setText(Html.fromHtml(“+hero+”+“赢得新徽章”);
Drawable d=getResources().getDrawable(R.Drawable.circle_shape_表示徽章);
支架。徽章图像。可缩位拉深(d);
字符串imageUrl=”http://iamheroic.net/iamheroic/badge_images/“+obj.icon;
imageLoader.displayImage(imageUrl、holder.badgeImage、选项);
holder.timelexing.setText(obj.postedSince);
}
打破
}
if(convertView!=null)
{
convertView.setTag(支架);
}
}
返回视图;
}
}
当我运行应用程序时,列表显示一个类型为1的布局,并为类型0留有空间,但没有显示。
任何帮助都将不胜感激。您还必须覆盖
getViewTypeCount()
以告诉列表视图
需要多少项目类型。它这样做是为了处理每种类型的循环视图
@Override
public int getViewTypeCount() {
return 2;
}
我加上去了,但还是