在我的应用程序中,我有一个显示员工的listView,每个项目都有它自己的名称,电子邮件和缩略图。一切工作正常,但缩略图。我ArrayAdapter,而不是显示所有员工个人资料照片缩略图,是这样的:ArrayAdapter只显示列表视图中最后添加的缩略图
- 确实显示所有默认的图片,当用户不选择特定雇员的任何图片被自动选择。 (默认的图片是在绘制文件夹:
"android.resource://com.witchking.modiryar/" + R.drawable.default_pic;
- 确实显示最后插入的雇员的图片作为缩略图
- 如果我回到以前的活动,我返回到列表,列表中不会显示连最后的画面
- 。如果我有2名以上的员工具有相同的图片,我跟图片一样重新创建另一名雇员,列表将显示所有员工与图片一样最后插入的雇员的图片!
这里是你的照片以更好地理解我所面临的:
我的问题适配器:添加默认图片
- 员工哈利波特
- 员工佛罗多bagins添加一个名为要回主活动后,“A”
- 员工列表画面和返回此活动
- 员工铁人添加了名为“B”的图片
- 员工超人添加了图片命名为 “A” 再次
,这里是我的代码:
ArrayAdapter getView()方法:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View myView = convertView;
String path ="android.resource://com.witchking.modiryar/" + R.drawable.default_pic;
Uri uri = null;
if (myView == null)
{
LayoutInflater layoutInflater;
layoutInflater = LayoutInflater.from(getContext());
myView = layoutInflater.inflate(R.layout.item_listviewitem, null);
}
PersonHandler myPerson = getItem(position);
if (myPerson != null){
TextView firstLine = (TextView) myView.findViewById(R.id.firstLine);
TextView secondLine = (TextView) myView.findViewById(R.id.secondLine);
ImageView profilePicture = (ImageView) myView.findViewById(R.id.icon);
if (myPerson.getPersonProfilePictureUrl() != null){
uri = Uri.parse(myPerson.getPersonProfilePictureUrl());
}else {
uri = Uri.parse(myPerson.getPersonProfilePictureUrl());
}
firstLine.setText(myPerson.getPersonFullName());
profilePicture.setImageURI(uri);
switch (personType)
{
case 'S': //person type student
secondLine.setText(myPerson.getPersonStudentNumber());
break;
case 'E': //person type employee
secondLine.setText(myPerson.getPersonEmail());
break;
case 'M': //person type Masters
secondLine.setText(myPerson.getPersonEmail());
break;
}
}
return myView;
}
PersonHandler
是处理基于不同的活动类型的人的查询类。这里是getPersonList()方法:
public List<PersonHandler> getPersonList(SQLiteDatabase sqldb, char personType){
Cursor cursor;
String fullName = null;
String stdNumber = null;
String email = null;
String query = null;
String path = "android.resource://com.witchking.modiryar/" + R.drawable.exclamation;
String[] columnName = new String[3];
List<PersonHandler> listPerson=new ArrayList<PersonHandler>();
/*
* dar in ghesmat query motenaseb ba personType
* ejra migardad
* query selected by person type
*/
switch (personType) {
case 'S':
query = "select * from " + "tbl_Students";
break;
case 'E':
query = "select * from " + "tbl_Employees";
break;
case 'M':
query = "select * from " + "tbl_Master";
break;
}
cursor = sqldb.rawQuery(query, null);
/*
* dar in ghesmat barname check mikonad ke agar cursor khali bood
* yani hich daneshjoo, karmand, ya ostadi add nashode
* pas bar asase personType tasmim migirad ke peyghame monaseb ra namayesh dahad
* checking if cursor is null and displaying proper message
* the message is added as an item in list
*/
int cnt = cursor.getCount();
if (cursor.getCount() <= 0){
PersonHandler newPerson=new PersonHandler();
newPerson.setPersonProfilePictureUrl(path);
switch (personType) {
case 'S':
fullName = "هیچ دانشجویی اضافه نشده";
stdNumber = "از منو گزینه دانشجوی جدید را انتخاب نمایید";
newPerson.setPersonFullName(fullName);
newPerson.setPersonStudentNumber(stdNumber);
break;
case 'E':
fullName = "هیچ کارمندی اضافه نشده";
email = "از منو گزینه کارمند جدید را انتخاب نمایید";
newPerson.setPersonFullName(fullName);
newPerson.setPersonEmail(email);
break;
case 'M':
fullName = "هیچ استادی اضافه نشده";
email = "از منو گزینه استاد جدید را انتخاب نمایید";
newPerson.setPersonFullName(fullName);
newPerson.setPersonEmail(email);
break;
}
listPerson.add(newPerson);
/*
* dar in ghesmat bar asase personType barname tasmim migirad
* ke field haye monasb ra bar asase query voroodi az cursor
* farakhani konad
* if cursor is not null, app selects proper columns based on person type
*/
}else {
cursor.moveToFirst();
while (!cursor.isAfterLast()){
PersonHandler newPerson=new PersonHandler();
switch (personType) {
case 'S':
newPerson.setPersonFirstName(cursor.getString(1)); //First Name Column
newPerson.setPersonLastName(cursor.getString(2)); //Last Name Column
newPerson.setPersonEmail(cursor.getString(5)); //Email or StudentNumber Column
newPerson.setPersonProfilePictureUrl(cursor.getString(7)); //Picture Url Column
break;
case 'E':
newPerson.setPersonFirstName(cursor.getString(1)); //First Name Column
newPerson.setPersonLastName(cursor.getString(2)); //Last Name Column
newPerson.setPersonEmail(cursor.getString(3)); //Email or StudentNumber Column
newPerson.setPersonProfilePictureUrl(cursor.getString(7)); //Picture Url Column
break;
case 'M':
newPerson.setPersonFirstName(cursor.getString(1)); //First Name Column
newPerson.setPersonLastName(cursor.getString(2)); //Last Name Column
newPerson.setPersonEmail(cursor.getString(3)); //Email or StudentNumber Column
newPerson.setPersonProfilePictureUrl(cursor.getString(7)); //Picture Url Column
break;
}
newPerson.setPersonFullName(newPerson.getPersonFirstName() + " " + newPerson.getPersonLastName());
listPerson.add(cursor.getPosition(), newPerson);
cursor.moveToNext();
newPerson = null;
}
}
return listPerson;
}
,最后我的onCreate()方法的活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_employees);
context = this;
SQLiteDatabase myDB = openOrCreateDatabase("ModirYar.db", MODE_PRIVATE, null);
char personType = 'E';
PersonHandler EmployeePerson = new PersonHandler();
List<PersonHandler> myPerson = new ArrayList<PersonHandler>();
myPerson = EmployeePerson.getPersonList(myDB, personType);
//get the list view reference
listViewEmployeesList = (ListView) findViewById(R.id.lstView_Employees);
sampleListAdapter myAdapter = new sampleListAdapter(this, R.layout.item_listviewitem, myPerson);
myAdapter.personType = personType;
listViewEmployeesList.setAdapter(myAdapter);
}
我真的很困惑。是什么导致这个问题? 在此先感谢...
使用通用图像加载器。 –
@vipulmittal我实际上已经发布了毕加索的很多更好的解决方案的答案(并相信我以前是我自己的UIL粉丝),但后来我意识到OP没有从网上加载 –
你是对的。但是如果所有的图像都是可绘制的,那么只需setImageResource(R.drawable.exclamation)就可以工作。 –