Я создал пользовательских ListView с одним ImageView и один TextView. Я также создал пользовательский адаптер от ArrayAdapter, и я использовал массив классов (MonsterLink []), чтобы получить всю информацию об адаптере. Но ListView все еще повторяет одну строку. Я попытался найти решение здесь (и я сделал это с помощью setTag, getTag), но он не помог, и я этого не понимаю. Это мое первое приложение.Пользовательские ListView повторяет одну строку
CreateView где я называю адаптер: @Override общественности Посмотреть onCreateView (LayoutInflater инфлятор, ViewGroup контейнер, Bundle savedInstanceState) {// вид нагрузки this.MyView = inflater.inflate (R.layout.fragment_list, контейнер ,ложный);
//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 адаптер работает.
EDIT - Новый адаптер Мой адаптер теперь выглядит следующим образом:
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;
}
}
Я не могу видеть, какие строки в настоящее время
Что вы имеете в виду? Вы можете видеть, что Im отправляет MonsterLink [] MonsterNames в качестве параметра адаптера. Этот массив уже заполнен.Внутри MonsterLink [] У меня есть два объекта (два имени), но ListView показывает одно и то же имя в каждой строке. – Somachr
Работы? @Somachr – Firecat
Нет, я не могу пройти через супер (контекст); в нем говорится, что я не могу использовать контекст здесь. – Somachr