드롭 다운에 대한 사용자 정의 레이아웃이있는 스피너에서 작업했습니다. 여기에 내 문제가 있는데, 내가 선택할 때, 드롭 다운의 두 번째 항목을 말하면 선택되고 드롭 다운이 닫힙니다. 드롭 다운을 다시 열면 첫 번째 행은 동일하게 유지되지만 두 번째 행은 첫 번째 행으로 이름이 변경됩니다. 하지만 그것은 log.d를 콘솔로 출력 할 때 그 위치를 알려줍니다 : 2가 선택되었습니다.선택된 스피너 항목이 스피너의 첫 번째 행으로 바뀝니다
여기 내 코드입니다,
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
return getCustomView(position, convertView, parent);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView = (TextView) convertView.inflate(getContext(), android.R.layout.simple_spinner_item, null);
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
textView.setTextColor(ContextCompat.getColor(getActivity().getApplicationContext(), R.color.blue));
if(list.getIsRecent()){
textView.setText("Most Recent ");
} else {
textView.setText(list.get(position).getName());
}
return textView;
}
public View getCustomView(final int position, View convertView, ViewGroup parent) {
boolean isRecent;
isRecent = list.get(position).getIsRecent();
if (convertView == null) {
convertView = inflater.inflate(R.layout.custom_spinner_layout, parent, false);
savedSearchName = (TextView) convertView
.findViewById(R.id.custom_spinner_layout_text_view);
btnDelete = (ImageButton) convertView
.findViewById(R.id.custom_spinner_layout_button);
relativeLayoutContainer = (RelativeLayout) convertView.findViewById(R.id.relativeLayout_item_name_container);
relativeLayoutContainer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG,"relativeLayoutContainer: setOnClickListener: position"+position);
Method method = null;
if(mSavedSearchCriteriaSpinner != null) {
mSavedSearchCriteriaSpinner.setSelection(position);
try {
method = Spinner.class.getDeclaredMethod("onDetachedFromWindow");
method.setAccessible(true);
method.invoke(mSavedSearchCriteriaSpinner);
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
if(isRecent){
btnDelete.setVisibility(View.INVISIBLE);
savedSearchName.setText(list.get(position).getName() + "MOSTRECENT");
} else {
savedSearchName.setText(list.get(position).getName());
btnDelete.setVisibility(View.VISIBLE);
btnDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//AlertDialog
});
}
}
return convertView;
}
그리고 이것은 숙제 문제가 아닙니다.
예, 동의합니다. 그러나 드롭 다운 문제는 여전히 지속됩니다. item1을 선택하면 드롭 다운을 다시 열 때 item0이 두 번 반복됩니다. – DJO
아, 죄송합니다. 예제를 너무 빨리 읽었습니다. 다시 검토 한 결과, 객체의 필드에'btnDelete'와'savedSearchName'을'getCustomView()'에 저장하고 있기 때문에 아마도 이것은 오래된 내용을 엉망으로 만든 것 같습니다. 또한 항상 뷰를 업데이트하십시오 (현재 convertView가 null이 아닌 경우 뷰를 업데이트하지 않습니다). 나는 대답을 업데이트 할 것이다. –
고맙습니다. 네, 그게 문제였습니다. ViewHolder 패턴을 사용하면 문제가 해결되었습니다. – DJO