私は、ドロップダウンのカスタムレイアウトを持つスピナーで作業しています。ここで私の問題は、私が選択すると、ドロップダウンの2番目の項目を言うと、それが選択され、ドロップダウンが閉じます。ドロップダウンを再び開くと、最初の行は同じままですが、2番目の行は最初の行に名前が変更されます。しかし、それはコンソールに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が2回繰り返されます。 – DJO
ああ、申し訳ありませんが、私はあまりにも速い例を読んでいます。これをもう一度見直した後、 'getCustomView()'にあなたのオブジェクトのフィールドに 'btnDelete'と' savedSearchName'を格納していると思われます。これはおそらく古い内容を壊しているようです。また、ビューを常に更新します(現在、convertViewがnullでない場合は更新しません)。私は答えを更新します。 –
ありがとうございます。はい、それは問題でした。 ViewHolderパターンの使用後、問題は解決されました。 – DJO