2012-07-19 4 views
1

목록보기가 8 개 (목록에 4 개) 있습니다. 각 뷰는 하나의 TextView와 하나의 ImageView (처음에는 투명으로 설정 됨)를 포함합니다. 이제 onItemClick 메서드에서 img를 imageView로 설정하려고합니다. 그 날 잘 작동하지만, 다른 뷰를 아래로 스크롤 할 때도 영향을 미칩니다. 예를 들어 0 번째 위치 항목을 선택하면 0 번째 및 4 번째 위치보기가 모두 같은 img로 설정됩니다. 어떻게 해결할 수 있을까요?다수의보기가 실행 중입니다. ListView android

자바 코드 :

list.setAdapter(new SimpleAdapter(this, 
      application.distanceList, R.layout.drop_down_view, from, to)); 
list.setOnItemClickListener(new OnItemClickListener() { 

     public void onItemClick(AdapterView<?> arg0, View v, int arg2, 
       long arg3) { 
      try { 
       ((ImageView) temp.findViewById(R.id.ddviv)) 
         .setImageResource(android.R.color.transparent); 
      } catch (NullPointerException e) { 

      } 
      ((ImageView) v.findViewById(R.id.ddviv)) 
        .setImageResource(R.drawable.drop_sel); 
      temp = v;} 
    }); 
+1

List 용 CustomAdapter를 사용하고 있습니까? 그렇다면 getView() 코드를 제공하십시오. 그렇지 않다면 구현하십시오. – user370305

+0

당신은'ViewHolder'를 사용하고 있습니까? –

+0

SimpleAdapter를 사용 중입니다. – Babloo

답변

0

당신은 당신의 getView() 방법 내부 ViewHolder들과 함께 사용자 지정 어댑터 (BaseAdapter을 확장하는 것은 좋은 선택)를 사용합니다. 을 (를) 클릭하면 일부 특성이 변경되고 notifyDataSetChanged()으로 전화하십시오.

사용자 정의 어댑터를 구현하는 방법을 모르는 경우, Google 일부 데이터를 조정하는

+0

, 나는 이렇게 많은 다른 목록보기 있습니다. 나는 모든 사용자 정의 어댑터를 만드는 데 관심이 없다. 이 다른 방법은 – Babloo

+0

@Babloo 왜 같은 사용자 지정 어댑터 클래스를 사용하지 않는 모든 동일한 listViews? 나는 당신을 얻지 못한다. – AMerle

+0

나의 요구 사항은 동일하지만 목록 항목이나 다르다.이 경우에는 1 TextView 및 1 ImageView 있지만 다른 경우에는 너무 일부 여분의 항목이 있습니다. – Babloo

0

) = ListView의 행에서 해당 이미지를 설정하는 또 다른 옵션을 tuts 많이되어 있고 또한 사용 a SimpleAdapter.ViewBinder. 행 뷰의 데이터를 설정하는 방법을 모르겠다 (fromto 배열에있는 것을 볼 수 없다) 또는 application.distanceList에 무엇을 가지고 있는가? 여기에 작은 예제가있다. (A ListView 행에 상당) application.distanceListMap에서 먼저이 같은 항목을 추가해야합니다 :

map.put("position", "x"); // where x is the list row number(for the first Map in application.distanceList x will be 0, for the second Map in application.distanceList x will be 1 etc) 

당신은 from 배열의 "position" 포함이 "position"에 해당하는 것입니다 당신 ImageView의 ID를 to 배열의 행 레이아웃에서 가져옵니다.

다음, 당신은 ListView 행의 이미지 (이것은 ListView의 재생 메커니즘을 처리합니다)에 결합하는 SimpleAdapter.ViewBinder를 추가해야합니다 :

mAdapter.setViewBinder(new SimpleAdapter.ViewBinder() { 

      @Override 
      public boolean setViewValue(View view, Object data, 
        String textRepresentation) { 
          // view is the ImageView from the row layout 
          // data is the x from the position column 
       if (view.getId() == R.id.imageView1) { 
        Integer rowNumber = Integer.parseInt((String) data); 
            // below is the explanation for mImageIds 
        ((ImageView) view).setImageResource(mImageIds[rowNumber]); 
        return true; 
       } 
       return false; 
      } 
     }); 

mImageIds하는 ints의 배열입니다 것입니다 ListView의 행에 대한 드로어 블의 ID를 누르고 마지막으로

// a field in your class 
private int[] mImageIds = new int[8]; // you said you had 8 rows 

//.. in the onCreate method initialize the mImageIds array 

    for (int j = 0; j < 8; j++) { 
     mImageIds[j] = R.drawable.ic_launcher;// a default image(you could use android.R.color.transparent for empty) 
    } 

onItemClick 콜백 :

public void onItemClick(AdapterView<?> arg0, View v, int arg2, 
       long arg3) { 
     mImageIds[position] = android.R.drawable.btn_minus; // the desired image 
     mAdapter.notifyDataSetChanged(); 
} 

이 사운드는 더 복잡합니다. 다른 사용자가 이미 말했던 것처럼 사용자 지정 어댑터를 작성하는 것이 원리를 이해하기를 바랍니다.

관련 문제