Bonjour a tous,
j'ai un nouveau soucis que j'ai du mal a implanter dans mon code.

Je voudrais appeler un DatePicker a partir d'un EditText qui est basé sur un ArrayAdapter.

Toutes les recherches que j'ai fait sur le net se basaient sur une activity, et j'ai du mal a trouver un code fonctionnel.

Voici un extrais de mon code que j'avais pensé utiliser:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
public class MorceauFilsAdapter extends ArrayAdapter<Fils> {
 
    private int mode;
    private SparseArray<String> editedValues;
 
    public MorceauFilsAdapter(Context context, List<Fils> fils, int mode) {
        super(context, R.layout.activity_morceau_fils, R.id.TV_mFils_Nom,fils);
        this.mode = mode;
        this.editedValues = new SparseArray<String>();
    }
 Calendar myCalendar = Calendar.getInstance();
 
    DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {
 
        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear,
                              int dayOfMonth) {
            // TODO Auto-generated method stub
            myCalendar.set(Calendar.YEAR, year);
            myCalendar.set(Calendar.MONTH, monthOfYear);
            myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
 
            String myFormat = "yyyyMMdd";
            SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.FRANCE);
            //holder.etVal.setText(sdf.format(myCalendar.getTime())); <-- Ici ca coince, je vois pas comment mettre a jour mon EditText
        }
 
    };
 
    private class ViewHolder {
        public TextView tvNom;
        public EditText etVal;
        public Switch swBool;
        public TextWatcher watcher;
    }
 
    public View getView(int position, View convertView, ViewGroup parent){
        View ret = super.getView(position,convertView,parent);
 
        ViewHolder holder = (ViewHolder) ret.getTag();
 
        if (holder == null) {
            holder = new ViewHolder();
            holder.tvNom = (TextView)ret.findViewById(R.id.TV_mFils_Nom);
            holder.etVal = (EditText)ret.findViewById(R.id.ET_mFils_Val);
            holder.swBool = (Switch)ret.findViewById(R.id.switch1);
            ret.setTag(holder);
        } else {
            holder.etVal.removeTextChangedListener(holder.watcher);
        }
 
        Fils fils = getItem(position);
        holder.tvNom.setText(fils.getNomFils());
        int type = fils.getTypeFils();
        String val = fils.getValeurFils();
 
        String value = this.editedValues.get(position);
        if (value == null)
            value = val;
        holder.etVal.setText(value);
 
        if (type < MaDatabase.TYPE_BOOL)
        {
            holder.etVal.setVisibility(View.VISIBLE);
            holder.swBool.setVisibility(View.GONE);
        }
        if (type == MaDatabase.TYPE_TEXT)
            holder.etVal.setInputType(InputType.TYPE_CLASS_TEXT);
        if (type == MaDatabase.TYPE_DATE) {
            holder.etVal.setFocusable(false);
                        holder.etVal.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                @Override
                public void onFocusChange(View v, boolean hasFocus) {
                    new DatePickerDialog(getContext(), date, myCalendar
                            .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                            myCalendar.get(Calendar.DAY_OF_MONTH)).show();
                    int toto = 1;
                }
            });
 
        }
        if (type == MaDatabase.TYPE_INT)
            holder.etVal.setInputType(InputType.TYPE_CLASS_NUMBER);
        if (type == MaDatabase.TYPE_BOOL) {
            holder.etVal.setVisibility(View.GONE);
            holder.swBool.setVisibility(View.VISIBLE);
            if (getContext().getString(R.string.yes).equals(value))
            {
                holder.swBool.setChecked(true);
                holder.swBool.setText(getContext().getString(R.string.yes));
                holder.etVal.setText(getContext().getString(R.string.yes));
            }
            else
            {
                holder.swBool.setChecked(false);
                holder.swBool.setText(getContext().getString(R.string.no));
                holder.etVal.setText(getContext().getString(R.string.no));
            }
            final ViewHolder finalHolder = holder;
            holder.swBool.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (finalHolder.swBool.isChecked()) {
                        finalHolder.swBool.setText(getContext().getString(R.string.yes));
                        finalHolder.etVal.setText(getContext().getString(R.string.yes));
                    } else {
                        finalHolder.swBool.setText(getContext().getString(R.string.no));
                        finalHolder.etVal.setText(getContext().getString(R.string.no));
                    }
                }
            });
        }
J'utilise un ViewHolder, et un SparseArray pour sauvegarder les données de mes EditText.

Autant pour le switch, c’était plutôt facile a gérer, mais pour la date, j'avoue que je coince un peu.

Pourriez vous m'aider pliz ?

Merci