【发布时间】:2015-07-21 23:51:19
【问题描述】:
我在 android 中有一个自定义 ArrayAdapter 用于填充我的自定义 ListView。但是,只有最后一项显示在我的 ListView 上,并且从第一项迭代到最后一项(我的数组中的最后一项在 listview 中显示 x 次,其中 x 是数组中的项数)。我曾尝试寻找答案,但这些地址回收视图使列表视图重复前几项。但是我的从头到尾重复最后一项。我在那里尝试了这些建议,但我的代码仍然运行相同。数组内容很好,因为正确的内容会打印在日志中。任何帮助表示赞赏。这是我的代码
public class VideoQueueAdapter extends BaseAdapter implements View.OnClickListener {
/*********** Declare Used Variables *********/
private Activity activity;
private ArrayList data;
private static LayoutInflater inflater=null;
public Resources res;
VideoListModel vid_list_item=null;
int i=0;
private Context context;
/************* CustomAdapter Constructor *****************/
public VideoQueueAdapter(Activity a, ArrayList d,Resources resLocal) {
this.context = context;
/********** Take passed val0ues **********/
activity = a;
data=d;
res = resLocal;
context = activity.getApplicationContext();
/*********** Layout inflator to call external xml layout () **********************/
inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
/******** What is the size of Passed Arraylist Size ************/
public int getCount() {
if(data.size()<=0)
return 1;
return data.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
/********* Create a holder to contain inflated xml file elements ***********/
public static class ViewHolder{
public TextView title;
public TextView url;
public TextView deadline;
public TextView id;
public ImageView thumbnail;
}
/*********** Depends upon data size called for each row , Create each ListView row ***********/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
ViewHolder holder;
if(vi==null){
/********** Inflate tabitem.xml file for each row ( Defined below ) ************/
vi = inflater.inflate(R.layout.activity_video_item, null);
/******** View Holder Object to contain tabitem.xml file elements ************/
holder=new ViewHolder();
}
else{ holder=(ViewHolder)vi.getTag();}
holder.thumbnail = (ImageView)vi.findViewById(R.id.vid_thumb);
holder.title = (TextView)vi.findViewById(R.id.vid_title);
holder.url = (TextView)vi.findViewById(R.id.vid_url);
holder.deadline = (TextView)vi.findViewById(R.id.item_timeout);
holder.id = (TextView)vi.findViewById(R.id.item_id);
/************ Set holder with LayoutInflater ************/
vi.setTag(holder);
if(data.size()<=0)
{
holder.title.setText("No Data");
}
else
{
/***** Get each Model object from Arraylist ********/
vid_list_item=null;
vid_list_item = (VideoListModel) data.get(position);
/************ Set Model values in Holder elements ***********/
String title = "";
String img = vid_list_item.getUrl();
img = "http://img.youtube.com/vi/"+ img+ "/0.jpg";
Picasso.with(context).load(img).resize(115, 115).into(holder.thumbnail);
holder.title.setText(vid_list_item.getTitle());
holder.url.setText(vid_list_item.getUrl());
holder.deadline.setText(vid_list_item.getTimeout());
holder.id.setText(vid_list_item.getId());
/******** Set Item Click Listner for LayoutInflater for each row ***********/
vi.setOnClickListener(new OnItemClickListener(position));
}
return vi;
}
@Override
public void onClick(View v) {
Log.v("CustomAdapter", "=====Row button clicked");
}
/********* Called when Item click in ListView ************/
private class OnItemClickListener implements View.OnClickListener {
private int mPosition;
OnItemClickListener(int position){
mPosition = position;
}
@Override
public void onClick(View arg0) {
// CustomListViewAndroidExample sct = (CustomListViewAndroidExample)activity;
// sct.onItemClick(mPosition);
}
}
}
【问题讨论】:
-
@Nam hoang 你建议的 url 让我重新思考我的代码,发现问题出在构造数组上。我将数组的代码检查内容放在错误的位置,让我相信它是正确的。显然我的问题是在填充我的数组列表的循环之外构建临时对象。这个link 显示了我的问题所在。感谢那些回答的人
标签: android listview android-listview