高度な検索のための全画面ダイアログフラグメントを作成しました。それはリサイクラービューとそのリサイクラービューに要素を追加するSpinnerを持っています。すべてのアイテムには、右上にEditText、スピナー、閉じるボタンがあります(申し訳ありませんが、閉じるボタンには別のアイコンを選択する必要があります)。スピナーの "Add filter"で選択したオプション(日付のオプションの一部)に応じて、アイテムのEdittextにDatepickerDialogをアタッチするかどうかを指定できます。 私のprobleです。メソッド "addEditext"で を設定しました。 "viewHolder.texto.setFocusable(false);"を設定しました。そのEditTextの中でDateを設定することが可能ですが、 "onBindviewHolder"では "viewHolder.texto.setFocusable(true);"を設定します。私はDate EditTextでフィルタを追加すると、それを削除し、後でEdiitextがフォーカスできないEdittTextの別の種類を追加します。リサイクリングラーモアのEdittextは、アイテムを絞るときにフォーカスが当てられません。
@Override
public void onBindViewHolder(Boarding_searchViewHolder viewHolder, final int position) {
viewHolder.texto.setText(lista_filtro.get(position).getTexto());
viewHolder.texto.setOnClickListener(null);
viewHolder.texto.setFocusable(true);
viewHolder.texto.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
//setting data to array, when changed
// this is a semplified example in the actual app i save the text
// in a .txt in the external storage
lista_filtro.get(position).setTexto(s.toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
addFilterText(viewHolder, position);
addSpinner(viewHolder, position);
addCloseButton(viewHolder, position);
// EditText aux= new EditText(viewHolder.itemView.getContext());
// lista_textos.add(aux);
//viewHolder.texto=lista_textos.get(position);
addEditText(viewHolder, position);
}
private void addEditText(final Boarding_searchViewHolder viewHolder, int position) {
Date fecha= new Date();
switch(lista_filtro.get(position).getFilter())
{
case ETD:
case ETA:
case AUTHORIZED_DATE:
viewHolder.texto.setFocusable(false);
final Calendar myCalendar = Calendar.getInstance();
final Cambiafecha cambiarfecha= new Cambiafecha(fecha, viewHolder.texto);
viewHolder.texto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new DatePickerDialog(viewHolder.itemView.getContext(), cambiarfecha, myCalendar
.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
myCalendar.get(Calendar.DAY_OF_MONTH)).show();
}
});
break;
}
}
class Cambiafecha implements DatePickerDialog.OnDateSetListener {
Date fecha;
EditText texto;
public Cambiafecha(Date fecha, EditText texto)
{
super();
this.texto=texto;
this.fecha=fecha;
}
@Override
public void onDateSet(DatePicker datePicker, int year, int month, int day) {
fecha.setMonth(month);
fecha.setDate(day);
fecha.setYear(year);
updateLabel();
}
private void updateLabel() {
String myFormat = "dd/MM/yy"; //In which you need put here
SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
texto.setText(sdf.format(fecha));
}
};
@ Tico1993私はあなたがそれをどのように実装できるかについていくつかの洞察を提供するために答えを修正しました。 ListViewに切り替えるには、同じアプローチが必要です。 – MeliX
私がedittextに設定したOnClickListenersイベントはどうなりますか?変更しますか?私が持っているもう一つの問題は、アイテムを削除すると、削除したアイテムの位置を取るアイテムも、削除したアイテムに設定したイベントになります。 – Tico1993
@ Tico1993はい、そうです。あなたのonBindViewHolderで 'viewHolder.texto.setOnClickListener(null);'も呼び出すべきです。 – MeliX