2014-02-18 4 views
0

전체적인 생각은 입력 된 값에 따라 ListView에서 TextView의 배경을 변경하는 것입니다.안드로이드는 ArrayList에서 값을 얻습니다.

예. 입력 된 값이 true이면 색이 변경됩니다.

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); 

는 토스트 전체를 반환

그러나 나는이 문제 문자열 여기

보다는 특정 값을 받고있는 것은 이것에 의해 호출되는 내 컨트롤러

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; 
} 

입니다 해시 맵 (hashmap)을 내가 원하는 "enabled"값이 아닌 그 위치에 추가합니다.

내 질문은이 값을 얻는 방법과 그 사실을 확인하는 방법과 입력 한 특정보기 (R.id.enabled)의 배경색을 변경하는 방법입니다.

+0

대신 기본 –

+0

를 사용하는 사용자 정의 어댑터를 작성해야합니다? 어쨌든 먼저 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; 
    } 

} 

를 사용합니다 그리고 마지막으로, 당신은 당신의 자신의 어댑터를 사용할 수 있습니다. 당신은`ArrayList` 내부에`HashMap`이 왜 내가 특정 뷰의 배경색을 변경하는 생각

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