2012-07-10 7 views
0

SimpleCursorAdapter를 사용하여 채워지는 ListView가 있습니다. 내가 뭘 원하는 것은 활동이 만들어 일부 공유 선호도에 따라 다른 뭔가에 이미지 뷰의 소스를 변경하는 것입니다ListView 행에서 ImageView를 변경하는 방법은 무엇입니까?

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 
    <TextView 
     android:id="@+id/row" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:padding="10dp" /> 

    <ImageView 
     android:id="@+id/enable_image" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:padding="10dp" 
     android:contentDescription="@string/image_description" 
     android:src="@android:drawable/checkbox_off_background" /> 

</RelativeLayout> 

: 행의 레이아웃은 아래와 같습니다. 이것은 내가 사용하는 코드이지만 작동하지 않습니다

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
    long appliedProfileId = prefs.getLong("appliedProfileId", -1); 

    if(appliedProfileId != -1) { 
     /*View rowView = (View) getListView().getAdapter().getView(info.psition, null, null); 
     TextView textView = (TextView) rowView.findViewById(R.id.row);*/ 
     ListView listView = getListView(); 
     ListAdapter adapter = listView.getAdapter(); 
     View appliedRowLayout = (View) adapter.getView(getItemPositionByAdapterId(adapter, appliedProfileId), null, null); 

     TextView textView = (TextView) appliedRowLayout.findViewById(R.id.row); 
     Log.d("asdasd", textView.getText().toString()); 
     ImageView imageView = (ImageView) appliedRowLayout.findViewById(R.id.enable_image); 
     imageView.setImageResource(android.R.drawable.checkbox_on_background); 
     setListAdapter(adapter); 
    } 

이것은 getItemPositionByAdapterId 방법입니다 :

private int getItemPositionByAdapterId(ListAdapter adapter, final long id) 
{ 
    for (int i = 0; i < adapter.getCount(); i++) 
    { 
     if (adapter.getItemId(i) == id) 
      return i; 
    } 
    return -1; 
} 

내가 목록보기의 내용을 읽을 수 있어요 있지만 변경할 수 없습니다 .. 좀 도와주세요 :)

+0

BaseAdapter 의해 어댑터 클래스를 확장 홀더 클래스 및 텍스트 뷰 이미지 뷰를 정의 holder.textview = (텍스트 뷰) convertView.findViewById (R.id.txt1)에 액세스하여; getView() 함수의 imageview도 마찬가지입니다. – AkashG

+0

감사합니다. 글쎄 난 그냥 CorsorAdapter 클래스를 확장하고 bindview 메서드를 재정의 .. 그것은 지금 완벽하게 작동합니다 :) –

답변

0

이 목록보기의 getView 메소드를 대체해야합니다. 확인 Customizing Android ListView Items

이렇게해야합니다.

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
if (position == 0) // first element in the list 
{ 
    convertView.findViewById(R.id.image1).setImageURI(....) 
} 
    and so on.... 
관련 문제