2014-01-14 22 views
0

我嘗試從url解析json並顯示項目列表視圖(圖像和文本)。我有一個問題適配器在listview上添加相同的項目。在我的URL上,我有20個項目 起初它似乎不錯,但當試圖滾動列表時,記錄是相同的(更具體地說,其記錄最初是列表) meybe我的問題是BaseAdapter,這是我的代碼Json BaseAdapter

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

如果有人知道解決我的問題,請幫助 感謝

回答

0

問題是持有人的創造..

@覆蓋 公共查看getView(INT位置,查看convertView,ViewGroup以及母公司){

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

}

+0

這是一個正確的解決方案您的選擇? –

+0

正如我在上面提到的代碼..如果convertview爲null,然後通過new運算符創建持有者對象,並且如果convertview不爲null,則從convertview持有人= convertview.getTag(); –

0

我覺得你的問題是你的getView方法。

@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其實和Android的活動,因爲你說如果(convertView == NULL,請不要實例它列表中的每個項目

+0

什麼是您的選擇的解決方案? –

0

你的問題是你的getView()函數),你做了一切在那裏,但如果convertview不爲空一切看起來相似,所以你應該添加其他條件我希望它給你的想法

+0

我改變了,它完美的炒作,但我的listview的滾動是滯後於大尺寸屏幕分辨率(例如nexus 7)也是我最後的代碼(女巫有一個問題json)listview的滾動不是滯後。我不知道什麼是問題。 –