2014-02-18 72 views
0

总体思路是根据放入其中的值在ListView中更改TextView的背景。Android从ArrayList中获取值

E.g.如果输入的值为真,则颜色会改变。

但是我遇到了麻烦的具体值,而不是字符串

这里是我的控制器

public ArrayList<HashMap<String, String>> getAllSkills() { 
    Log.d(LOGCAT, "getAll"); 
    ArrayList<HashMap<String, String>> wordList; 
    wordList = new ArrayList<HashMap<String, String>>(); 
    String selectQuery = "SELECT * FROM " + "characterSkills"; 
    SQLiteDatabase database = this.getWritableDatabase(); 
    Cursor cursor = database.rawQuery(selectQuery, null); 
    if (cursor.moveToFirst()) { 
     do { 
      HashMap<String, String> map = new HashMap<String, String>(); 
      map.put("skillId", cursor.getString(0)); 
      map.put("skillName", cursor.getString(1)); 
      map.put("ability", cursor.getString(2)); 
      map.put("rank", cursor.getString(3)); 
      map.put("enabled", cursor.getString(4)); 
      wordList.add(map); 
     } while (cursor.moveToNext()); 
    } 
    return wordList; 
} 

正由这家名为:

ArrayList<HashMap<String, String>> characterSkills = controller 
      .getAllSkills(); 

    ListAdapter adapter = new SimpleAdapter(CharacterSheet.this, 
      characterSkills, R.layout.dd_skill_entry, new String[] { 
        "skillId", "skillName", "ability", "rank", "enabled" }, 
      new int[] { R.id.skillid, R.id.skillname, R.id.ability, 
        R.id.rank, R.id.enabled }); 


    Toast.makeText(getApplicationContext(), "" + characterSkills.get(4), Toast.LENGTH_LONG).show(); 

    setListAdapter(adapter); 

的祝酒返回整个hashmap在那个位置,而不是我想要的“enabled”值。

所以我的问题是我如何得到这个值,如何检查它的真实性,以及它是否改变了它输入的特定视图(R.id.enabled)的背景颜色。

+0

我想改变的具体意见的背景颜色,你需要创建自定义的,而不是使用默认 –

+0

适配器,为什么你有一个'ArrayList'内'HashMap'?在任何情况下,您首先需要访问'ArrayList'中的特定'HashMap',然后从'HashMap'中获取特定值 – Emmanuel

回答

1

我认为做的最好的事情就是创建一个像

public class CharacterSkills { 

private long skillId; 
private String skillName; 
private boolean enabled; 

// TODO : make getters/setters 

} 

一个POJO,然后在函数中使用该POJO。像这样的东西:

public List<CharacterSkills> getAllSkills() { 
    Log.d(LOGCAT, "getAll"); 
    List<CharacterSkills> wordList; 
    wordList = new ArrayList<CharacterSkills>(); 
    String selectQuery = "SELECT * FROM " + "characterSkills"; 
    SQLiteDatabase database = this.getWritableDatabase(); 
    Cursor cursor = database.rawQuery(selectQuery, null); 
    if (cursor.moveToFirst()) { 
     do { 
      CharacterSkills character = new CharacterSkills(); 
      character.setSkillId(cursor.getLong(0)); 
      character.setSkillName(cursor.getString(1)); 
      character.setEnabled(cursor.getInt(2) == 1 ? true : false); // there is no boolean in SQLite 
      // TODO : all informations about character 

      wordList.add(map); 
     } while (cursor.moveToNext()); 
    } 
    return wordList; 
} 

则可以使用自定义适配器

public class CharacterAdapter extends BaseAdapter { 
    private List<CharacterSkills> characters; 

    public CharacterAdapter(List<CharacterSkills> characters) { 
     this.characters = characters; 
    } 

    @Override 
    public int getCount() { 
     return characters.size(); 
    } 

    @Override 
    public CharacterSkills getItem(int position) { 
     return characters.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // You can use ViewHolder pattern to optimize your listview 
     convertView = LayoutInfalter.from(ctx).inflate(R.layout.dd_skill_entry, null); 
     TextView myCharacter = (TextView) convertView.findViewById(R.id.enabled); 
     CharacterSkills character = characters.get(position); 
     // TODO : define your background 
     if (character.isEnabled()) { 
      myCharacter.setBackgroundResource(R.drawable.yourdrawableenable); 
     } else { 
      myCharacter.setBackgroundResource(R.drawable.yourdrawabledisable); 
     } 
     return convertView; 
    } 

} 

最后,你可以用自己的适配器。

List<CharacterSkills> characters = controller.getAllSkills(); 
CharacterAdapter adapter = new CharacterAdapter(characters); 
setListAdapter(adapter);