2015-12-01 55 views
0

在我的應用程序中,我有一個顯示員工的listView,每個項目都有它自己的名稱,電子郵件和縮略圖。一切工作正常,但縮略圖。我ArrayAdapter,而不是顯示所有員工個人資料照片縮略圖,是這樣的:ArrayAdapter只顯示列表視圖中最後添加的縮略圖

  • 確實顯示所有默認的圖片,當用戶不選擇特定僱員的任何圖片被自動選擇。 (默認的圖片是在繪製文件夾:"android.resource://com.witchking.modiryar/" + R.drawable.default_pic;
  • 確實顯示最後插入的僱員的圖片作爲縮略圖
  • 如果我回到以前的活動,我返回到列表,列表中不會顯示連最後的畫面
  • 。如果我有2名以上的員工具有相同的圖片,我跟圖片一樣重新創建另一名僱員,列表將顯示所有員工與圖片一樣最後插入的僱員的圖片!

這裏是你的照片以更好地理解我所面臨的:

我的問題適配器:添加默認圖片

image

  1. 員工哈利波特
  2. 員工佛羅多bagins添加一個名爲要回主活動後,「A」
  3. 員工列表畫面和返回此活動
  4. 員工鐵人添加了名爲「B」的圖片
  5. 員工超人添加了圖片命名爲 「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); 

} 

我真的很困惑。是什麼導致這個問題? 在此先感謝...

+0

使用通用圖像加載器。 –

+0

@vipulmittal我實際上已經發布了畢加索的很多更好的解決方案的答案(並相信我以前是我自己的UIL粉絲),但後來我意識到OP沒有從網上加載 –

+0

你是對的。但是如果所有的圖像都是可繪製的,那麼只需setImageResource(R.drawable.exclamation)就可以工作。 –

回答

0

嘗試用戶通用圖像加載器以從drawable中加載圖像。 類似的東西這樣的:

ImageLoader.getInstance().displayImage(context, "drawable://" + uri, profilePicture); 

的URI將只具有資源ID在裏面。

+0

其實我是UIL的新手,應該將UIL設置放在適配器構造函數中嗎?我已經完成了,然後用'imageLoader.displayImage(uri.toString(),profilePicture)'替換'profilePicture.setImageURI(uri);'''getView()''方法。但該應用程序崩潰。 –

+0

你得到什麼錯誤? –

+0

它說不幸的應用程序停止工作。這是一個邏輯錯誤,我想用profilePicture。我追蹤它,但無法弄清楚錯誤發生的地方。我甚至在'path'變量中傳遞了'String uri'參數,但即使默認圖片是可繪製的,它仍然沒有結果。 –