2014-05-12 3 views
0

나는 때마다 항목을 클릭 할 항목 레이아웃 내부의 이미지를 보여주고 싶은 :ListFragment onListItemClick 이상한 행동

public class CustomList extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor> { 
    ... 

    @Override 
    public void onListItemClick(ListView list, View view, int position, long id) { 
    super.onListItemClick(list, view, position, id); 

    ImageView imageToShow = (ImageView) view.findViewById(R.id.myImageId); 
    if (imageToShow != null) { 
     if (imageToShow.getVisibility() == View.INVISIBLE) { 
     imageToShow.setVisibility(View.VISIBLE); 
     } 
    } 
    } 

    ... 
} 

행 항목 레이아웃 설정 가시성 속성을 이미지 뷰를 가지고

에 "보이지 않는"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tooth="http://schemas.android.com/apk/res/pl.vmcard" 
    <!-- ... --> 
    <ImageView 
    android:id="@+id/myImageId" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/image" 
    android:src="@drawable/ic_action_event" 
    android:visibility="invisible" /> 
</LinearLayout> 

문제는 행 항목을 클릭하면 해당 이미지가 표시되지만 목록 하단의 다른 항목에도 나타납니다. 따라서 위치 0의 항목을 클릭하면 위치 7의 항목에도 이미지가 표시됩니다. 그 이유는 무엇인지 알 수 없습니다.

편집 - CustomAdapter.getView() 메소드 :

public class CustomAdapter extends SimpleCursorAdapter { 
    ... 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
    final View row = super.getView(position, convertView, parent); 
    if (position % 2 == 0) 
     row.setBackgroundResource(R.drawable.list_item_background_even); 
    else 
     row.setBackgroundResource(R.drawable.list_item_background_odd); 
    return row; 
    } 
    ... 
} 
+0

포스트'CustomAdapter' – Apoorv

+0

@Apoorv 당신의'getView' 코드를 관리하는 getView을하도록하는 것입니다. – schabluk

답변

1

그 이유는 ListView 풀 전망이다. adapter.getSize()과 같은 수의보기를 얻지는 못하지만 화면에 맞는보기 수가 늘어납니다. 이것은 성능상의 이유로 만들어졌습니다. 공상 아무것도 : 당신이해야 할 것은 당신의 dataset 따라 당신이 onListItemClick에서 수행 할 작업을 변경하고 뷰의 가시성

+0

예, 이것을 CustomAdapter 클래스에 넣으려고했지만 다른 항목을 클릭 한 후에 이미지를 숨길 때 어려움에 직면하게됩니다 (현재보기 및 이전에 숨기기). – schabluk

+0

어떤 종류의 문제입니까? 사용자 정의 어댑터는 예를 들어 – Blackbelt

+0

으로가는 올바른 방법입니다. Adapter 클래스에서'setOnClickListener'를 실행하면 CustomList에 설정된'ListView.CHOICE_MODE_SINGLE'이 작동하지 않는 것 같습니다. – schabluk