0

업데이트 제안 된대로 데이터보기 소유자를 내 코드에 추가했지만 여전히 동일한 문제에 직면하고 있습니다. 제 질문을 편집했으며 제 코드를 살펴보십시오.사용자 지정 목록보기의 행 위치 번호에 혼동이 있음

줄 번호에 따라 내 목록보기에 2 개의보기를 표시하려고합니다. 첫 번째 행에는 오른쪽 열차 엔진을, 두 번째 행에는 왼손 열차 엔진을 표시하고 그 반대의 경우도 표시하려고합니다.

그 반대의 경우 행보기 변경 조건 및 확인 위치를 mod % 2 == 0이라면 이상하게도 이상합니다.하지만 앱을 실행하면 정확한 왼쪽 오른쪽 표시가됩니다.하지만 아래로 스크롤하면 두 개의 오른손 열차 열차를 하나씩 가지고 있습니다. 여기

는 List_row1.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="500dp" 
android:background="@drawable/list_selector" 
android:orientation="horizontal" 
android:padding="5dip" > 
<include android:id="@+id/mainview" layout="@layout/activity_main" /> 

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="horizontal"> 
<HorizontalScrollView 
    android:id="@+id/horizontalScrollView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" > 
    <include android:id="@+id/train" layout="@layout/train" /> 
</HorizontalScrollView> 

코드

public LazyAdapter(Activity a, ArrayList<String> songsList) { 
    activity = a; 
    data=songsList; 
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 
public int getCount() { 
    Log.d("Listview","Count is"+data.size()); 
    return data.size(); 
} 
public Object getItem(int position) { 
    return position; 
} 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public int getItemViewType(int position) { 
    Log.d("position is - ", "position is "+position); 
    if(position%2==0) 
    { 
    return 0; 
    } 
    else 
    { 
    return 1; 
    } 

} 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder = null; 
    int type = getItemViewType(position); 
    System.out.println("getView " + position + " " + convertView + " type = " + type); 
    if (convertView == null) { 
     holder = new ViewHolder(); 
     switch (type) { 
      case 0: 
       convertView = inflater.inflate(R.layout.list_row1, null); 
       holder.caption = holder.caption = ((ImageView)convertView.findViewById(R.id.train).findViewById(R.id.boogi1).findViewById(R.id.imageView1)); 
       break; 
      case 1: 
       convertView = inflater.inflate(R.layout.list_row2, null); 
       holder.caption = holder.caption = ((ImageView)convertView.findViewById(R.id.train2).findViewById(R.id.boogi2).findViewById(R.id.imageView1)); 
       break; 
     } 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder)convertView.getTag(); 
    } 

    return convertView; 
} 

static class ViewHolder { 
    ImageView caption; 

    } 

입니다 Train2.xml에서

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="horizontal"> 
    <include android:id="@+id/boogi1" layout="@layout/boogi" /> 
    <include android:id="@+id/boogi2" layout="@layout/boogi" /> 
    <include android:id="@+id/engine" layout="@layout/engine" /> 

train.xml 태그 순서 변경 포함.

+1

어떻게'list_row2'와'list_row1'가 다른 배경과 다른가요? –

+0

list_row 1에 2 개의 include 태그가 있고 열차 엔진의 이미지 뷰가 하나 이상이며 list_row2에 첫 번째 열차 엔진 이미지 뷰가 있고 이후에 선형 레이아웃의 태그가 2 개 포함되지만 방향은 수평입니다. –

답변

1
우리가이 있어야 목록 홀더를 스크롤 할 때 inflated보기를 개최하기 때문에보기를 중립으로 View Holder를 사용하지 않는

....

보기 다음보기 홀더를 초기화하고 팽창 후에 당신의 물건을 할 .

0

if(convertView==null) 여기에서 문제가 될 수 있습니다.

현재 convertView = null 일 때만 사용할보기를 확인하는 코드가 선택됩니다. 귀하의 경우 convertView 아마 null이 아니므로, convertView가 다시 null이 될 때까지 (아마도 스크롤 때문에) 동일한 뷰를 여러 번 재사용합니다.

해당 부분을 나간 다음 다시 시도해보십시오.

+0

나는 그것을 제거하고 이제는 완벽하게 작동합니다 ..하지만이 조건을 제거하면 미래에 어떤 문제가 발생합니까 ?? –

+0

빠르게 스크롤 할 때 메모리 문제가 발생할 수 있습니다. 필요한 두 개의 'Views'를 필드로 바꾸고 레이아웃 시간과 시간을 다시 팽창시키는 대신에 다시 사용할 수 있습니다. –

+0

유감스럽게 생각합니다. 이해가 안되요. 초보자로서 자세하게 설명해 주시겠습니까? –

0

mahaveermuttha와 paresh mayani는 뷰 소유자 및 adilsoomra를 사용하여 getViewTypeCount()를 추가하는 것을 잊었다 고 지적했습니다. 그리고 내 문제를 해결한다.