왼쪽에는 ImageView가 있고 다음은 EditText가있는 사용자 정의 listview가 있고 오른쪽에는 다른 ImageView가 있습니다. 출처.목록보기에서 클릭 한 항목의 이미지 리소스를 변경하는 방법
그럼이 뷰에는 onItemClickListener가 있습니다. 항목 클릭에 대한 오른쪽 (처음에는 소스가없는 이미지 뷰)의 소스를 변경하고 싶습니다.
는이를 위해이 코드를 구현 : 항목을 클릭에
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ImageView icone2 = (ImageView) view.findViewById(R.id.icone2_lugar);
icone2.setImageResource(R.drawable.flag_origem);
}
이미지 뷰는 succefully 삽입됩니다. 그러나 목록을 아래로 스크롤하면 목록을 스크롤하기 전에 클릭 한 것과 같은 위치에있는 다른 모든 요소도 이미지 리소스를 변경한다는 것을 알게되었습니다.
왜 그런가? 안드로이드는 같은 시간에 모든 요소보기를로드하는 대신 목록을 스크롤하는 것처럼 새로운보기를로드합니다. 따라서 onItemClick의 View 매개 변수를 사용하여 목록의 요소 자원을 변경할 수 없습니다.
그래서 목록보기에서 클릭 된 요소의 리소스를 어떻게 변경할 수 있습니까?
편집 :
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View linha = convertView;
ArmazenadorLugar armazenador = null;
if (linha == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
linha = inflater.inflate(R.layout.linha_lugar, parent, false);
armazenador = new ArmazenadorLugar(linha);
linha.setTag(armazenador);
} else {
armazenador = (ArmazenadorLugar) linha.getTag();
}
armazenador.popularFormulario(mListaLugares.get(position), mContext);
return linha;
}
public LugarAndroid getItem(int position) {
return mListaLugares.get(position);
}
당신이 발견 한대로, 뷰는 ListView에서 재활용됩니다. 내 자신의 사용자 지정 어댑터를 만들고 getView()를 재정의하고 거기에 선택 논리를 둡니다. –
실제로이 목록은 이미 어댑터에 있으며 getView 메소드도 있습니다. 방금 말한 것을 ilustrate하기 위해 코드 조각을 게시 할 수 있습니까? getView에 전달해야하는 매개 변수는 int position, View convertView, ViewGroup parent –
항목을 다시 클릭하면 어떻게됩니까? 아이콘을 다시 바꿔야합니까 아니면 그냥 그대로 유지해야합니까? –