首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Json BaseAdapter

Json BaseAdapter
EN

Stack Overflow用户
提问于 2014-01-15 00:16:29
回答 3查看 324关注 0票数 0

我尝试从url中解析json并显示项目listview(图片和文本)。我有一个有问题的适配器在listview上添加相同的项。在我的URl上,我有20个项目,一开始似乎很好,但是当我尝试滚动列表时,记录是相同的(更具体地说,记录最初是列表)可能我的问题是BaseAdapter,这是我的代码

代码语言:javascript
复制
private LayoutInflater inflater;
private Activity activity;
public ArrayList<HashMap<String, String>> data;
public ViewHolder holder;

public ImageLoader imageLoader;
HashMap<String, String> itemList;
private int screenSize;
MainActivity main;

public BRIgeAdapter(Activity a, ArrayList<HashMap<String, String>> d,
        int screenSize) {
    this.activity = a;
    this.data = d;
    this.screenSize = screenSize;
    inflater = (LayoutInflater) activity
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    imageLoader = new ImageLoader(activity.getApplicationContext());
}

public int getCount() {
    return data.size();
}

public Object getItem(int position) {
    return data.get(position);
}

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

@Override
public int getViewTypeCount() {
    return data.size();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    if (convertView == null) {
        holder = new ViewHolder();
        main = new MainActivity();
        convertView = inflater.inflate(R.layout.list_row, parent, false);

        holder.journal = (TextView) convertView
                .findViewById(R.id.smalljournal);
        holder.statId = (TextView) convertView
                .findViewById(R.id.smallstatID);

        holder.smallDescription1 = (TextView) convertView
                .findViewById(R.id.smallDescription1);
        holder.DateTime = (TextView) convertView
                .findViewById(R.id.smallDateTime);
        holder.thumb_image = (ImageView) convertView
                .findViewById(R.id.smallthumb);
        holder.title = (TextView) convertView.findViewById(R.id.smalltitle);
        holder.description = (TextView) convertView
                .findViewById(R.id.smallDescription);

        convertView.setTag(holder);
        itemList = data.get(position);


        holder.journal.setText(itemList.get(MainActivity.KEY_journal));
        // holder.DateTime.setText(itemList.get(MainActivity.KEY_pubDate));
        holder.statId.setText(itemList.get(MainActivity.KEY_statID));
        holder.smallDescription1.setText(itemList
                .get(MainActivity.KEY_description));
        holder.journal.setTypeface(MainActivity.tf2);

        String titleString = itemList.get(MainActivity.KEY_title);

        Calendar cal = new GregorianCalendar(2013, 11, 20);
        DateFormat df = new SimpleDateFormat("dd.MM.yyyy");

        // DateFormat df = new SimpleDateFormat("yyyy-MM-dd");

        String date = df.format(cal.getTime());

        String DateTime = itemList.get(MainActivity.KEY_pubDate);
        DateTime = date;

        holder.DateTime.setText(DateTime);

        holder.thumb_image.setScaleType(ScaleType.FIT_XY);

        holder.title.setText(titleString);
        holder.title.setTypeface(MainActivity.tf2);

        holder.title.setLineSpacing(2, 1.2f);
        holder.description.setLineSpacing(2, 1.2f);

        if (screenSize == Configuration.SCREENLAYOUT_SIZE_NORMAL)
            holder.description.setVisibility(View.INVISIBLE);
        else
            holder.description.setText(itemList
                    .get(MainActivity.KEY_description));

        holder.description.setTypeface(MainActivity.tf2);
        imageLoader.DisplayImage(itemList.get(MainActivity.KEY_image),
                holder.thumb_image);

    }
    return convertView;
}

static class ViewHolder {
    public TextView journal, title, description, smallDescription1,
            DateTime, statId;
    ImageView thumb_image;
}

如果有人知道如何解决我的问题,请帮助我,谢谢

EN

回答 3

Stack Overflow用户

发布于 2014-01-15 00:30:35

创建holder时出现问题..

@Override public View getView(int position,View convertView,ViewGroup parent) {

代码语言:javascript
复制
if (convertView == null) {
    holder = new ViewHolder();
    main = new MainActivity();
    convertView = inflater.inflate(R.layout.list_row, parent, false);

    holder.journal = (TextView) convertView
            .findViewById(R.id.smalljournal);
    holder.statId = (TextView) convertView
            .findViewById(R.id.smallstatID);

    holder.smallDescription1 = (TextView) convertView
            .findViewById(R.id.smallDescription1);
    holder.DateTime = (TextView) convertView
            .findViewById(R.id.smallDateTime);
    holder.thumb_image = (ImageView) convertView
            .findViewById(R.id.smallthumb);
    holder.title = (TextView) convertView.findViewById(R.id.smalltitle);
    holder.description = (TextView) convertView
            .findViewById(R.id.smallDescription);

    convertView.setTag(holder);

}else{ holder=convertview.getTag();} itemList =data.get(位置);

代码语言:javascript
复制
    holder.journal.setText(itemList.get(MainActivity.KEY_journal));
    // holder.DateTime.setText(itemList.get(MainActivity.KEY_pubDate));
    holder.statId.setText(itemList.get(MainActivity.KEY_statID));
    holder.smallDescription1.setText(itemList
            .get(MainActivity.KEY_description));
    holder.journal.setTypeface(MainActivity.tf2);

    String titleString = itemList.get(MainActivity.KEY_title);

    Calendar cal = new GregorianCalendar(2013, 11, 20);
    DateFormat df = new SimpleDateFormat("dd.MM.yyyy");

    // DateFormat df = new SimpleDateFormat("yyyy-MM-dd");

    String date = df.format(cal.getTime());

    String DateTime = itemList.get(MainActivity.KEY_pubDate);
    DateTime = date;

    holder.DateTime.setText(DateTime);

    holder.thumb_image.setScaleType(ScaleType.FIT_XY);

    holder.title.setText(titleString);
    holder.title.setTypeface(MainActivity.tf2);

    holder.title.setLineSpacing(2, 1.2f);
    holder.description.setLineSpacing(2, 1.2f);

    if (screenSize == Configuration.SCREENLAYOUT_SIZE_NORMAL)
        holder.description.setVisibility(View.INVISIBLE);
    else
        holder.description.setText(itemList
                .get(MainActivity.KEY_description));

    holder.description.setTypeface(MainActivity.tf2);
    imageLoader.DisplayImage(itemList.get(MainActivity.KEY_image),
            holder.thumb_image);

}
return convertView;

}

票数 0
EN

Stack Overflow用户

发布于 2014-01-15 00:32:46

我认为您的问题出在您的getView方法上。

代码语言:javascript
复制
@Override
public View getView(int position, View convertView, ViewGroup parent) {

if (convertView == null) {
    holder = new ViewHolder();
    main = new MainActivity();
    convertView = inflater.inflate(R.layout.list_row, parent, false);

    holder.journal = (TextView) convertView
            .findViewById(R.id.smalljournal);
    holder.statId = (TextView) convertView
            .findViewById(R.id.smallstatID);

    holder.smallDescription1 = (TextView) convertView
            .findViewById(R.id.smallDescription1);
    holder.DateTime = (TextView) convertView
            .findViewById(R.id.smallDateTime);
    holder.thumb_image = (ImageView) convertView
            .findViewById(R.id.smallthumb);
    holder.title = (TextView) convertView.findViewById(R.id.smalltitle);
    holder.description = (TextView) convertView
            .findViewById(R.id.smallDescription);

    convertView.setTag(holder);

 }

    ViewHolder holder = (ViewHolder ) convertView.getTag()

    itemList = data.get(position);


    holder.journal.setText(itemList.get(MainActivity.KEY_journal));
    // holder.DateTime.setText(itemList.get(MainActivity.KEY_pubDate));
    holder.statId.setText(itemList.get(MainActivity.KEY_statID));
    holder.smallDescription1.setText(itemList
            .get(MainActivity.KEY_description));
    holder.journal.setTypeface(MainActivity.tf2);

    String titleString = itemList.get(MainActivity.KEY_title);

    Calendar cal = new GregorianCalendar(2013, 11, 20);
    DateFormat df = new SimpleDateFormat("dd.MM.yyyy");

    // DateFormat df = new SimpleDateFormat("yyyy-MM-dd");

    String date = df.format(cal.getTime());

    String DateTime = itemList.get(MainActivity.KEY_pubDate);
    DateTime = date;

    holder.DateTime.setText(DateTime);

    holder.thumb_image.setScaleType(ScaleType.FIT_XY);

    holder.title.setText(titleString);
    holder.title.setTypeface(MainActivity.tf2);

    holder.title.setLineSpacing(2, 1.2f);
    holder.description.setLineSpacing(2, 1.2f);

    if (screenSize == Configuration.SCREENLAYOUT_SIZE_NORMAL)
        holder.description.setVisibility(View.INVISIBLE);
    else
        holder.description.setText(itemList
                .get(MainActivity.KEY_description));

    holder.description.setTypeface(MainActivity.tf2);
    imageLoader.DisplayImage(itemList.get(MainActivity.KEY_image),
            holder.thumb_image);

}
return convertView;
}

另外,如果MainActivity确实是安卓活动,请不要为列表中的每一项都实例化它

票数 0
EN

Stack Overflow用户

发布于 2014-01-15 02:04:07

您的问题出在您的getView()函数上,因为您说的是if (convertView==null),并且您在那里做了所有的工作,但是如果convertview不为null,所有内容看起来都很相似,所以您应该添加else条件,我希望它能给您一些启发

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21118356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档