【发布时间】:2017-01-11 17:51:12
【问题描述】:
我创建了一个 自定义 ListView,其中包含一个 ImageView 和一个 TextView。我还从 ArrayAdapter 创建了 自定义适配器,并且我正在使用 类数组 (MonsterLink[]) 来获取适配器的所有信息。但 ListView 仍在重复一行。我试图在这里找到解决方案(我确实做到了,使用 setTag、getTag)但它没有帮助,我也不太明白。这是我的第一个应用程序。
CreateView 我调用适配器的地方: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //加载视图 this.MyView = inflater.inflate(R.layout.fragment_list, container,false);
//Change the category label
SetCategoryLabel();
//Load DB;
LoadDatabase();
//Create list for MonsterList
MonsterLink[] MonsterLinkList = LoadMonsterLinkList();
MonsterAdapter monsteradapter = new MonsterAdapter(this.getContext(), MonsterLinkList);
ListView MonsterList = (ListView) MyView.findViewById(R.id.list_Monsters);
MonsterList.setAdapter(monsteradapter);
// Inflate the layout for this fragment
return this.MyView; //inflater.inflate(R.layout.fragment_list, container, false);
}
我的适配器:
public class MonsterAdapter extends ArrayAdapter<MonsterLink> {
public MonsterAdapter(Context context, MonsterLink[] MonsterNames) {
super(context, R.layout.monster_row, MonsterNames);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder mHolder;
// Get the data item for this position
MonsterLink monster = getItem(position);
// Check if an existing view is being reused, otherwise inflate the view
if (convertView == null){
convertView = LayoutInflater.from(getContext()).inflate(R.layout.monster_row,parent,false);
mHolder = new ViewHolder();
/**TextView MonsterName = (TextView) convertView.findViewById(R.id.txt_MonsterName);
ImageView MonsterPic = (ImageView) convertView.findViewById(R.id.img_MonsterPic);**/
mHolder.mName = (TextView) convertView.findViewById(R.id.txt_MonsterName);
mHolder.mPic = (ImageView) convertView.findViewById(R.id.img_MonsterPic);
convertView.setTag(mHolder);
}else {
mHolder = (ViewHolder) convertView.getTag();
}
mHolder.mName.setText(monster.getName());
return convertView;
}
private class ViewHolder{
private TextView mName;
private ImageView mPic;
}
}
正如我所说,这是我在 Android 上的第一个应用程序,我真的不明白适配器中的 ViewHolder 是如何工作的。
编辑 - 新适配器 我的适配器现在看起来像这样:
public class MonsterAdapter extends BaseAdapter {
@Override
public int getCount() {
return monsterList.size();
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public Object getItem(int position) {
return null;
}
ArrayList<MonsterLink> monsterList;
Context context;
public MonsterAdapter(Context context, ArrayList<MonsterLink> MonsterNames) {
this.monsterList = MonsterNames;
this.context = context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Get the data item for this position
MonsterLink monster = monsterList.get(position);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.monster_row,parent,false);
TextView name = (TextView) convertView.findViewById(R.id.txt_MonsterName);
ImageView pic = (ImageView) convertView.findViewById(R.id.img_MonsterPic);
name.setText(monster.getName());
return convertView;
}
}
我现在看不到任何行
【问题讨论】:
标签: android listview android-arrayadapter