2011-03-23 9 views
0

내 응용 프로그램에 ListActivity가 있습니다. 이 목록은 해시 맵의 ArrayList 형식으로 파싱 된 http 응답에서 채워집니다.목록보기의 Android 동적 아이콘

final ArrayList<HashMap<String,String>> LIST = new ArrayList<HashMap<String,String>>(); 
... 
SimpleAdapter adapter = new SimpleAdapter(this, LIST, R.layout.item_row, new String[]{"author","title"}, new int[]{R.id.text1,R.id.text2}); 
setListAdapter(adapter); 
... 
for(Element src : lists){ 
    String title = src.select(); 
    String author = src.select(); 
    HashMap<String,String> temp = new HashMap<String,String>(); 
    temp.put("author", author); 
    temp.put("title", title); 
    LIST.add(temp); 
} 

구문 분석 된 http에서 작성자와 제목을 올바르게 파생합니다. R.layout.item_row의 XML 파일에서

나는 텍스트 2에 대한 드로어 블을 정의 :

android:drawableLeft="@drawable/default_icon"

그리고 난 해시 맵이 경우 주어진 행에에 "new_icon를"그 아이콘을 변경할 수 있도록하고 싶습니다 특정 문자열을 포함합니다.

위의 대한 루프 내, 내가 좋아하는 뭔가를 추가 할 예를 들어

: 나는 간결 특정 로직을 떠날거야

 
String status = src.select(); 
String icon = "default"; 
if(status.contains("test")){ 
    icon = "should_change"; 
} 
temp.put("icon", icon); 
...etc 

,하지만 내가 제대로 아이콘이 변경할지 여부를 통과 할 수 있어요 또는 어댑터에 문자열 값으로 반환하지는 않지만 실제로 아이콘을 변경하는 방법을 모르겠습니다.

저는 자바 나 안드로이드 중 하나를 경험하지 못했습니다. 그래서 나는 거꾸로 접근하고 있습니다.

도움이 될 것입니다.

답변

0

나는 그것을 알아낼 수 있었다.

우선 대신 SimpleAdapter를 사용하는, I는

 
public class SpecialAdapter extends SimpleAdapter { 

     public SpecialAdapter(Context context, 
       List> data, int resource, 
       String[] from, int[] to) { 
      super(context, data, resource, from, to); 
      // TODO Auto-generated constructor stub 
     } 
} 

SimpleAdapter

확장하는 클래스를 첨가하고, 그것으로 "아이콘"의 값을 확인하고 그에 따라 그리기를 설정하는의 getView 수단을 추가 :

 
@Override 
     public View getView(int position, View convertView, ViewGroup parent){ 

      View row = convertView; 

       if(row==null){ 
       LayoutInflater inflater=getLayoutInflater(); 
       row=inflater.inflate(R.layout.item_row, parent, false); 
       } 
       TextView text1=(TextView)row.findViewById(R.id.text1); 
       text1.setText(LIST.get(position).get("author")); 
       TextView text2=(TextView)row.findViewById(R.id.text2); 
       text2.setText(LIST.get(position).get("title")); 

       ImageView icon=(ImageView)row.findViewById(R.id.icon); 
       if(LIST.get(position).get("icon") == "should_change"){ 
        icon.setImageResource(R.drawable.new_icon); 
       } 
       else { 
        icon.setImageResource(R.drawable.default_icon); 
       } 



      return row; 
     } 

내 주 수업에서는 SimpleAdapter 인스턴스를 SpecialAdapter로 바꿨습니다.

그리고 마침내, item_row.xml에, 나는 drawableLeft 정의를 제거하고 그 자리

0

감사에서 "아이콘"의 ID로 이미지 뷰를 추가! LIST는 저를 위해 작동하지 않았습니다 - MyActivity.LIST와 같이 목록을 호출 한 활동 클래스로 만들어야했습니다 - 세부 사항에 대한 정의로도 단축하십시오

관련 문제