#android #listview
#Android #listview
Вопрос:
Я пытаюсь использовать адаптер в своем приложении для Android для добавления изображений в мои элементы в моем ListView :
это мой адаптер :
public class ItemAdapter extends ArrayAdapter<String> {
private final Context context;
private final String[] Names;
private final int rowResourceId;
public ItemAdapter(Context context, int textViewResourceId, String[] objects) {
super(context, textViewResourceId, objects);
this.context = context;
this.Names = objects;
this.rowResourceId = textViewResourceId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(rowResourceId, parent, false);
ImageView imageView = (ImageView) rowView.findViewById(R.id.imageFileView);
TextView textView = (TextView) rowView.findViewById(R.id.fileName);
String name = Names[position];
String extFile = Names[position].substring(Names[position].lastIndexOf("."));
textView.setText(name);
String uri = "drawable/" extFile;
// int imageResource = R.drawable.icon;
//int imageResource = getResources().getIdentifier(uri, null, getPackageName());
// set image to ImageView
Uri imgUri=Uri.parse(uri);
imageView.setImageURI(imgUri);
return rowView;
}
}
Я также использую другой адаптер в своем приложении, чтобы добавить запрос на обновление в мой ListView, но этот работает отлично.
я думаю, что он не вызывает мой «ItemAdapter», потому что system.out.print ничего не показывает
Я называю свой адаптер следующим образом :
public void getList(){
client.get(server "get/files/1" folderPath, new JsonHttpResponseHandler() {
@Override
public void onSuccess(JSONArray files) {
String[] listeNames=new String[files.length()];
for (int i = 0; i < files.length(); i ) {
try {
listeNames[i]=files.getString(i);
} catch (JSONException e) {
System.err.println("error :" e.getMessage());
}
}
list_files.setAdapter(new ItemAdapter(mainActivity,android.R.layout.simple_list_item_1,listeNames));
list_files.setAdapter(new ArrayAdapter<String>(mainActivity,android.R.layout.simple_list_item_1,listeNames));
((PullToRefreshListView) list_files).onRefreshComplete();
}
});
}
Ответ №1:
У A ListView
может быть только один Adapter
. Проблема в том, что вы делаете это:
list_files.setAdapter(new ItemAdapter(mainActivity,android.R.layout.simple_list_item_1,listeNames));
list_files.setAdapter(new ArrayAdapter<String>(mainActivity,android.R.layout.simple_list_item_1,listeNames));
Таким образом, второй Adapter
переопределяет первый. Именно по этой причине он работает отлично и ItemAdapter
никогда не вызывается.
Вы должны попытаться собрать эти два Adapter
s в один.
Комментарии:
1. да, я тоже думал об этом, но как я могу это сделать, потому что ArrayAdapter не является персонализированным адаптером
2. @yassine__ Ваш пользовательский адаптер расширяет ArrayAdapter, что означает, что он наследует все качества ArrayAdapter. Так что я не понимаю вашей точки зрения
3. An
ArrayAdapter
— это просто объект, используемый для заполненияListView
. Поэтому создайте свой собственныйAdapter
, расширивArrayAdapter
класс (как вы сделали дляItemAdapter
) и поместите всю логику в этот пользовательский класс.4. ах, хорошо, я новичок в Android, поэтому я этого не знал
5. Да, есть много вещей, которые нужно знать об Android;) Вы можете принять этот ответ, если он был полезен для вас, чтобы другие, столкнувшиеся с такой же проблемой, легко нашли способ ее решения.