2016-02-01 35 views
-1

工作(指示的解決方案是不是viewHolder)ViewHolder在列表視圖的自定義適配器沒有在安卓

我初學者到Android。現在我正在使用帶有自定義適配器的ListView。我閱讀了關於在適配器中使用視圖保持器的文章。它快15%。但是當我使用視圖持有者時,listview什麼也沒有顯示。

這是自定義適配器使用我持有觀點

public class PodcastListAdapter extends ArrayAdapter<Podcast> { 
    private ArrayList<Podcast> values; 
    private Context context; 


    public PodcastListAdapter(Context pcontext,ArrayList<Podcast> pvalues) 
    { 
     super(pcontext,-1,pvalues); 
     this.context = pcontext; 
     this.values =pvalues; 
    } 

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

     LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View rowView = inflater.inflate(R.layout.podcast_list_row,parent,false); 
     TextView titleTv = (TextView)rowView.findViewById(R.id.row_title); 
     TextView descriptionTv = (TextView)rowView.findViewById(R.id.row_description); 
     TextView durationTv = (TextView)rowView.findViewById(R.id.row_duration); 
     TextView fileSizeTv = (TextView)rowView.findViewById(R.id.row_file_size); 
     titleTv.setText(values.get(position).getTitle()); 
     descriptionTv.setText(values.get(position).getDescription()); 
     durationTv.setText(values.get(position).getDuration()); 
     fileSizeTv.setText(String.valueOf(values.get(position).getFileSize())); 
     Log.i("CALLED","CALLED"); 
     return rowView; 
    } 

} 

它可以正常使用了。

但是當我在適配器使用視圖座這樣

public class PodcastListAdapter extends ArrayAdapter<Podcast> { 
    private ArrayList<Podcast> values; 
    private Context context; 

    static class ViewHolder { 
     public TextView titleTextView; 
     public TextView descriptionTextView; 
     public ImageView imageView; 
     public TextView durationTextView; 
     public TextView fileSizeTextView; 
    } 


    public PodcastListAdapter(Context pcontext,ArrayList<Podcast> pvalues) 
    { 
     super(pcontext,-1,pvalues); 
     this.context = pcontext; 
     this.values =pvalues; 
    } 

    @Override 
    public View getView(final int position,View convertView,ViewGroup parent) 
    { 
     View rowView = convertView; 

     if(rowView==null) 
     { 
      LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      rowView = layoutInflater.inflate(R.layout.podcast_list_row,null); 

      ViewHolder viewHolder = new ViewHolder(); 
      viewHolder.descriptionTextView = (TextView)rowView.findViewById(R.id.row_description); 
      viewHolder.titleTextView = (TextView)rowView.findViewById(R.id.row_title); 
      viewHolder.durationTextView = (TextView)rowView.findViewById(R.id.row_duration); 
      viewHolder.fileSizeTextView = (TextView)rowView.findViewById(R.id.row_file_size); 
      viewHolder.imageView = (ImageView)rowView.findViewById(R.id.row_image); 
      rowView.setTag(viewHolder); 
     } 
     ViewHolder holder = (ViewHolder) rowView.getTag(); 
     holder.titleTextView.setText(values.get(position).getTitle()); 
     holder.descriptionTextView.setText(values.get(position).getDescription()); 
     holder.durationTextView.setText(values.get(position).getDuration()); 
     holder.fileSizeTextView.setText(String.valueOf(values.get(position).getFileSize())); 
     return rowView; 

    } 

} 

我的列表視圖中沒有顯示任何數據。請問我的代碼有什麼問題?請幫幫我。

+0

你確定getView是被稱爲? – Blackbelt

+0

請確定您的getView是致電並堅持您以前的問題,而不是再次創建新問題。 – kopikaokao

+0

[無法在Android中的抽象請求偵聽器中更新ListView適配器]的可能重複(http://stackoverflow.com/questions/35125216/cannot-update-listview-adapter-in-the-volley-request-listener-in- android) – kopikaokao

回答

0

因爲你使用兩種不同的持有者對象和你的另一對象不沒有什麼 .Declare您viewHolder對象出側if語句

像這樣:

@Override 
    public View getView(final int position,View convertView,ViewGroup parent) 
    { 
     View rowView = convertView; 
ViewHolder viewHolder; 
     if(rowView==null) 
     { 
      LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      rowView = layoutInflater.inflate(R.layout.podcast_list_row,null); 
viewHolder = new ViewHolder(); 

      viewHolder.descriptionTextView = (TextView)rowView.findViewById(R.id.row_description); 
      viewHolder.titleTextView = (TextView)rowView.findViewById(R.id.row_title); 
      viewHolder.durationTextView = (TextView)rowView.findViewById(R.id.row_duration); 
      viewHolder.fileSizeTextView = (TextView)rowView.findViewById(R.id.row_file_size); 
      viewHolder.imageView = (ImageView)rowView.findViewById(R.id.row_image); 
      rowView.setTag(viewHolder); 
     } 
    else { 
     viewHolder = (ViewHolder) rowView.getTag(); 
    } 
     viewHolder.titleTextView.setText(values.get(position).getTitle()); 
     viewHolder.descriptionTextView.setText(values.get(position).getDescription()); 
     viewHolder.durationTextView.setText(values.get(position).getDuration()); 
     viewHolder.fileSizeTextView.setText(String.valueOf(values.get(position).getFileSize())); 
     return rowView; 

    } 
+0

我試過了,它不起作用 –

+0

已經做了我已經告訴過你 –

+1

它甚至不會編譯。將else子句中的語句從viewHolder =(ViewHolder)更改爲v.getTag(); viewHolder =(ViewHolder)rowView.getTag(); – kopikaokao

相關問題